인프런 커뮤니티 질문&답변

skek2875님의 프로필 이미지
skek2875

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

41번 연속된 자연수의 합 문제 질문 드립니다.

해결된 질문

작성

·

422

0

선생님의 강의를 듣기 전에 직접 문제를 풀어보았는데 해설 강의를 듣고나서 고민이 생겨 질문드립니다.

우선 제가 풀이한 방식은 다음과 같습니다.

int main(){

//freopen("input.txt", "rt", stdin);

int n, i, j, end, sum = 0, cnt=0;

scanf("%d", &n);

if (n%2 == 0) end = n/2;

else end = (n/2)+1;

for (i = end; i >= 1; i--) {

sum += i;

if (sum == n) {

printf("%d ", i);

for (j = i+1; j <= end; j++)

printf("+ %d ", j);

printf("= %d\n", n);

sum -= end;

end--;

cnt++;

}

else if (sum > n) {

sum -= end;

end--;

}

}

printf("%d", cnt);

return 0;

}

입력받은 숫자 N부터 1씩 감소시키면서 sum에 누적하고 그 값이 처음의 N값과 동일하면 수식을 출력하는 방식으로 코드를 작성했습니다. 제공해주신 채점기를 돌려본 결과도 100점이 나왔구요.

그런데 강의를 들어보니, 저라면 몇 시간을 주어도 몰랐을 풀이법으로 문제를 해결하시더라구요. 강의 앞에서 말씀하셨다시피 지원자의 직감도 중요하게 보는 것 같은데 혹시 문제를 해결함에 있어서 이런 직감적인 부분을 얻으려면 어떻게 해야하는건가요? 문제를 풀면서 이런 방식을 발견할 때마다 외워야만 가능한 건가요? 아니면 문제를 풀다보면 자연스럽게 배워지는 부분인건가요?

답변 1

3

김태원님의 프로필 이미지
김태원
지식공유자

너무 걱정 안하셔도 될 코드구현력을 가지고 계십니다.

인터뷰에서 물어보는 것은 많이 제한되어 있습니다. 이런 강의를 통해서 하나 배우고 운 좋으면 그게 걸려드는 것입니다. 꾸준히 공부하시면 됩니다. 꾸준함에 장사없습니다. 

그리고 평상시 수학관련 서적을 읽으시면 좋습니다. 

재미있게 읽을 수 있는 책을 추천해드리자면 : 

1. 이 문제 풀 수 있겠어? (알렉스 벨로스 지음, 북라이프출판)

2. 재미있는 영재들의 수학퍼즐 1권, 2권(박부성 지음, 자음과 모음 출판)

3. 특목고 자사고 가는 수학 3권(통계와 게임이론), 4권(확률과 함수): 살림출판

1번 책을 꼭 읽어보시고 고민 많이 해보세요.

skek2875님의 프로필 이미지
skek2875

작성한 질문수

질문하기