← All Posts

[프로그래머스 C]짝수의 합 문제풀이

C언어 학습하기

프로그래머스 입문 짝수의 합#

정수 n이 주어질 때 n 이하의 짝수를 모두 더한 값을 return하는 문제다.

예를 들어 n이 10이라면 10 이하의 짝수는 2, 4, 6, 8, 10이고, 모두 더하면 30이 나온다.

처음 생각한 것#

파이썬으로 기본 문법을 공부했기 때문에 문제를 봤을 때 풀이 방법 자체는 어렵지 않았다.

n까지 하나씩 확인하면서 짝수인지 검사하고, 짝수라면 answer에 계속 더하면 된다고 생각했다.

처음에는 C로 이렇게 작성했다.

int solution(int n) {
int answer = 0;
for(0; n <= n; n++){
if(n % 2 == 0){
answer += n;
}
}
return add;
}

n이 10이라면 0부터 10까지 돌면서 짝수인지 확인하고, 짝수일 때 answer에 더하려고 했다.

예를 들어 2를 찾으면 answer에 2를 더하고, 다음 짝수인 4를 찾으면 기존 answer에 4를 더하는 식으로 최종값을 구하려고 했다.

왜 어려웠나#

알고리즘 자체는 단순했는데 C 문법에서 막혔다.

특히 for문을 작성하는 방법이 아직 익숙하지 않았다. 처음에는 for(0; n <= n; n++)처럼 작성했는데, 반복을 담당할 변수를 따로 만들지 않았다.

그리고 n 자체를 하나씩 증가시키고 있었다.

생각해보면 n이 10일 때 n <= n은 항상 참이다. n이 10이면 10 <= 10, n을 증가시켜 11이 되면 11 <= 11이 된다.

그래서 n을 반복 변수로 사용하면 계속 조건이 참이 되어 무한히 반복하게 된다.

문제 풀이#

n은 입력받은 값으로 그대로 두고, 반복을 담당할 새로운 변수 i를 만들었다.

int solution(int n) {
int answer = 0;
for (int i = 1; i <= n; i++) {
if (i % 2 == 0) {
answer += i;
}
}
return answer;
}

이제 i가 1부터 n까지 증가하면서 짝수인지 확인한다.

n이 10이라면 i가 1, 2, 3, 4 … 10까지 증가하고, 그중 i % 2 == 0인 경우에만 answer에 더한다.

그래서 2 + 4 + 6 + 8 + 10이 되어 최종적으로 30을 반환한다.

처음 코드에서 return add라고 작성한 것도 잘못이었다. 내가 값을 저장한 변수의 이름은 answer이기 때문에 마지막에는 return answer를 해야 한다.

이번에 C를 처음 배우면서 for문 문법도 다시 확인했다.

for (int i = 1; i <= n; i++)

여기서 int i = 1은 반복에 사용할 변수 i를 만들고 1로 시작하는 부분이고, i <= n은 i가 n 이하인 동안 반복하라는 뜻이다. 마지막 i++는 반복할 때마다 i를 1씩 증가시킨다.

새롭게 알게 된 것#

이번 문제를 풀면서 n과 반복에 사용하는 변수를 따로 생각해야 한다는 것을 알게 됐다.

처음에는 n 자체를 계속 증가시키려고 했는데, n은 문제에서 주어진 값을 나타내는 변수로 그대로 두고 i를 만들어 반복시키는 방식으로 수정했다.

또 파이썬의 for문과 C의 for문이 다르다는 것도 다시 확인했다.

C에서는

for (초기식; 조건식; 증감식)

처럼 ;으로 각각의 부분을 구분한다.

아직 C 문법이 익숙하지 않아서 파이썬에서 사용하던 방식과 섞이지 않도록 계속 직접 문제를 풀면서 익혀야 할 것 같다.

다음에 비슷한 문제를 보면#

다음에 for문이 필요한 문제를 보면 먼저 반복에 사용할 변수를 따로 만들어야 하는지부터 생각해야겠다.

특히 입력으로 받은 n을 반복하면서 직접 변경하고 있지는 않은지 확인하고, 필요하다면 i 같은 별도의 변수를 만들어 반복시키는 방식으로 접근해야겠다.