분류 전체보기 129

2023년.

벌써 추석이네요. 해피 추석!!! 😊 추석에 멍하니 있다가 갑자기 블로그가 생각나서 들어와 봤는데요. 그동안 머 열심히 이것저것 많이 썼다는 것을 보니까 옛날 생각도 나고 그렇습니다 하하.. 회사에 취직한 지 벌써 곧 2년이 다 되어가는데요. 생각해 보니까 이런저런 일들도 많았고, 이슈도 터졌고,, 구현에 어려움도 많이 느껴서 이것저것 많이 찾아보고 공부하고.. 많은 시니어분들께 여러 가지 가르침과 팁 등등 많은 것들을 하면서 지금까지 시간을 보내지 않았나 싶습니다. (물론 게임도 했어요..) 읽으시는 분이 있을진 모르겠지만, 2023년 동안 어떤 것들을 해왔고 느꼈고 보고 있었는지는 모르겠지만 나름 다들 각자의 목표를 향해 달려 나갈 거라 믿습니다. 먼가 정서적인 감정이 풍푸한 글 같지만,, 오랜만에 ..

회고록 2023.09.29

[C++] 조합

조합은 순서를 고려하지 않습니다. 순서는 고려하지 않고 다양하게 몇 개를 뽑을 지에 집중합니다. 조합을 구현하는 테크닉은 3가지가 있습니다. 중첩 반복문 n명 중 r개를 선택하는 방법일 때, r의 수가 3개 이하라면 반복문으로 빠르고 쉽게 구현할 수 있습니다. for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { } } } next_permutation 을 이용하자. 순열의 특징을 가져와 1은 애들이 선택됐다고 보면 되고, 0은 선택받지 못한 애들이 됩니다. 즉 5C2 라면 chk 배열을 {0, 0, 0, 1, 1}이라고 두고, 1일 때에만 출력하면 됩니다. int main() { v..

string.Format()을 보간 문자열로 대체하라

개발을 하다 보면 정말 많이 사용하는 것이 바로 문자열입니다. 보통 문자열을 표현할 때에는 정말 순수하게 문자열만 표현할 수도 있지만, 간혹 숫자와 같이 작성하거나 다른 특수 기호와 함께 사용되어야 할 때에도 많이 존재하는데요. C#에서는 조금 더 편리한 기능을 제공하는 보간 문자열에 대해서 알아보고자 합니다. 보간 문자열? 이름이 되게 어색하게 들릴 수 있지만 C# 6.0에 도입된 기능입니다. 제일 좋은 것은 바로 코드 가독성이 대폭 향상됩니다. 코드 가독성이 향상되었다는 것은 미연에 개발자의 실수를 줄이고 조금 더 복잡한 문제에 집중할 수 있게 된다는 뜻도 있습니다. 기존에 널리 사용되었던 string.Format() 또한 문자열 변환 과정을 잘 수행하지만, 생성된 문자열을 직접 출력해보고 올바른 형..

CS/Effective C# 2023.05.06

캐스트보다는 is, as가 좋다

캐스트의 경우에는 스타크래프트로 따지면, 드랍쉽에는 여러 유닛을 태울 수 있는데요. 여러 유닛의 각 특징들의 메서드(행동)를 가져오려고 할 때 그 유닛으로 캐스팅을 해야 그 유닛의 고유의 능력이나 행동을 가져올 수 있습니다. 그럴 때 캐스트가 필요하게 되는데요. 캐스트에 대해서 어떻게 하면 더 효율적으로 사용할 수 있는지에 대해서 알아봅시다. C#은 정적 타이핑을 수행하는 언어입니다. 그래서 보통 판단은 정적으로 하려고 하는데요. 위와 같은 상황에서 런타임에서(게임 실행 중)에 반드시 타입을 확인해야할 필요가 있는 경우가 있습니다. C#에서는 2가지 캐스트를 지원합니다. 1. as 연산자를 사용하는 방법 (더 방어적으로 사용하는 is 연산자로 형변환이 가능한지를 확인한 후에 실제 형변환 진행) 2. 일반..

CS/Effective C# 2023.05.06

const보다는 readonly가 좋다.

간혹 성능을 위해서 상수형을 작성하게 될 때 엄청난 고민을 하게 됩니다. 이때 누구는 const를 쓰고, 또 누구는 readonly를 쓰고 있습니다. 어떨 때 이걸 쓰고, 또 어떨 때 이걸 쓰는지 코드를 작성하다 보면 고민이 깊어져 2시간가량을 먹었던 기억이 있습니다. 그 답 오늘 해결해봅시다! C#은 컴파일타임 상수와 런타임 상수 2 유형의 상수를 가집니다. 컴파일타임 상수는 const를 의미하고, 런타임 상수는 readonly를 의미합니다. // 컴파일타임 상수 public cosnt int Millennium = 2000; // 런타임 상수 public static readonly int ThisYear = 2004; 컴파일타임 상수가 약간 더 빠르긴 하지만, 런타임 상수에 비해서 유연성이 떨어집니..

CS/Effective C# 2023.04.23

지역변수는 var를 사용하는 것이 낫다.

최근에 인턴으로 들어오신 팀원이 지난 주에 직군 면접을 봤었습니다. 직군 면접에 대해서 이것저것 얘기하다 보니 생각난 것이 있습니다. 바로 Effective C#인데요. 사수님께서 입사 후 제일 먼저 사주신 책입니다. 예전에 직군 면접 보기 전에 한번 정독했던 기억도 나고, 블로그에 정리하면서 내실을 다지는 것이 어떨까하여 시작합니다. 가장 흥미로우면서도 편리한 var 에 대해서 설명하는 단원이네요. 득 보다 실이 많다. 정확한 반환 타입을 알지 못한 채 올바르지 않은 타입을 명시적으로 지정하게 되면 오히려 손해라는 뜻입니다. 극단적으로 값 타입을 object 형으로 받아버리는 것도 마찬가지죠. 버그가 발생하여 유지보수를 하려고 할 때에 많은 코드 분석을 하게 됩니다. 이럴 때 너무 긴 코드는 오히려 집..

CS/Effective C# 2023.04.23

접두어 방식과 접미어 방식의 차이

어떤게 더 좋을까? // 접미어 for (int i = 0; i < n; i++) { ... } // 접두어 for (int i = 0; i < n; ++i) { ... } 접미어 방식이나 접두어 방식 모두 논리적으로는 아래 블록으로 들어오게 되면 i 자체는 논리적으로 모두 +1씩 증가하게 됩니다. 접미어 방식과 접두어 방식의 선택이 프로그램의 행동에 영향을 주지 않더라도, 이런 선택이 때때로는 실행 속도에 작게 나마 영향을 준다고 합니다. 접미어 방식은 1. 값의 복사본을 만든다. 2. 복사본의 값을 증가시킨다. 3. 복사본을 리턴한다. 접두어 방식은 1. 값을 증가시킨다. 2. 그 값을 리턴한다. 복사본을 만든다는 과정의 차이가 생깁니다. 복사본이라는 것은 작은 프리미티브 타입이라면 괜찮으나, 사용자..

CS/C++ 2023.03.05

자동공간, 정적공간, 동적공간

최근 C++ 로 공부하고 있어 C++ 문법 기준으로 작성함을 알려드립니다. (_ _) 면접에서 한 번 질문받았던 내용입니다. ~ 님 혹시 자동공간, 정적공간, 동적공간에 대해서 아시나요? 그때는 첫 면접이라 아는 건 엄청 많았는데,, 설명을 너무너무 못했습니다. (따흑..) 면접 끝난 후에 복귀하면서 이렇게 쉽게 설명할 수 있는걸! 하는 기억에.. 이번에 좀 자세하게 작성해서 또 같은 실수를 반복하지 않도록 방지하고자 작성합니다. 여러분은 아시나요? 한 번 생각해보시고 아래로 와주세요. C++ 에서는 데이터를 저장해 두기 위한 메모리를, 대입하는 방법에 따라 3가지로 구분합니다. 자동 공간(Automatic storage), 동의어로는 자유 공간 혹은 힙(heap)이라고 하네요. 정적 공간(Static ..

[백준 11051] 이항 계수 2

자연수 N과 K가 주어졌을 때, 이항 계수 nCk 를 구하는 문제입니다. 해당 숫자를 10,007로 나누는 의미는 대부분 큰 숫자인 경우에 해당 숫자로 나누는 테크닉이 필요합니다. 이항 계수는 중요한 성질을 가지고 있습니다. n과 k가 같을 때 혹은 k가 0일 때는 1입니다. 이를 통해 base condition 을 만족할 수 있고, 파스칼 법칙에 의하면 nCr = n-1Cr-1 + n-1Cr 을 만족하게 됩니다. 이러한 법칙을 하나씩 하다 보면 반복되는 구간이 생기게 됩니다. 반복되는 것을 계속해서 계산하는 것은 낭비입니다. 따라서 한 번 구한 답을 캐시에 저장하면, 이후에 꺼내다 쓰면 됩니다. 이것을 메모리제이션이라고 합니다. 위에서 base condition도 만족하지 않고, 메모도 하지 않았다면 ..

Algorithm 2022.01.11