저번에 지나가는 얘기로 for 문 안에서 생성된 변수는 for 문 안에서만, 즉 밖에서 사용할 수 없다고 설명했었습니다. 그럼에도 불구하고 외부에서 사용해야 할 때가 종종 있는데요, 이번 문제 역시 그런 케이스입니다. 이럴 땐 어떻게 해야 할까요?
이번 문제 합(#8393)에서는 숫자를 입력받으면 1부터 n까지의 합을 구하는 프로그램을 작성해야 합니다. for 문을 어떻게 활용해야 하는지 대충 감이 오시나요? 바로 코드를 살펴보시죠.
#include <stdio.h>
int main(void) {
int a;
int b = 0;
scanf("%d", &a);
for (int i = 1; i <= a; i++) {
b += i;
}
printf("%d\n", b);
return 0;
}
저번 문제들과는 달리 이번에는 변수를 for 문 밖에서 선언했고 값도 바로 정해 주었습니다. scanf 함수를 통해서 무조건 값을 받을 수 있는 a와는 달리 위 코드처럼 값을 할당해 주지 않는다면 상황에 따라서(a가 1 보다 작을 때) b는 값을 아예 할당받지 못할 수도 있기 때문이죠. 값을 못 받게 되면 나중에 printf 함수에서 b를 출력할 때 문제가 생기기 때문에 확실하게 값을 할당받을 수 없을 때는 항상 변수를 선언하면서 값을 할당해 주어야 합니다.
이번 문제에서는 출력을 한 번만 해야 합니다. for 문 안에서 printf 함수를 사용하면 반복하는 수만큼 출력을 하기 때문에 for 문 밖에서 사용해야 하는데, 아까 얘기한 듯이 for 문 안에서 선언된 변수는 밖에서 사용할 수 없습니다. 만약 b를 밖이 아니라 for 문 안에서 선언했다면 나중에 printf 함수가 b라는 변수를 찾지 못해서 출력을 할 수가 없죠. 그렇기 때문에 이런 경우에는 외부에서 변수를 선언하고, for 문에서 사용한 뒤, 외부에서 다시 사용해야 합니다. 외부에서 생성된 변수는 for 문 내에서도 얼마든지 사용할 수 있기 때문이죠.
for (int i = 1; i <= a; i++) {
b += i;
}
1부터 n까지 더해야 하기 때문에 매번 1씩 증가하는 i를 활용하면 간단합니다. 다만 1부터 시작해야 하기 때문에 i를 1로 설정해 두고, n까지 되기 위해서 조건식을 i <= a로 설정해야 합니다. 이 부분만 조심한다면 나머지는 쉽게 이해하실 수 있을 겁니다.
테스트를 해 봅시다! 실행을 한 뒤 숫자를 입력하면 성공적으로 1부터 그 숫자까지의 합을 출력하네요.
백준으로 돌아와서 언어를 C로 설정한 뒤 제출을 해 줍시다.
성공!
다음 문제, 빠른 A + B(#15552)는 전에 했었던 A+B-3과 똑같고, 그다음 문제인 N 찍기(#2741)도 조금만 고민하고 배운 것들을 응용하면 풀 수 있는 간단한 문제라서 건너뛰겠습니다. 기찍 N(#2742)으로 돌아올게요!
'프로그래밍 > 백준' 카테고리의 다른 글
백준으로 배우는 C 언어 18. 별 찍기 - 1 (3) | 2020.03.14 |
---|---|
백준으로 배우는 C 언어 17. 기찍 N (4) | 2020.03.14 |
백준으로 배우는 C 언어 15. A + B - 3 (1) | 2020.03.13 |
백준으로 배우는 C 언어 14. 구구단 (4) | 2020.03.12 |
백준으로 배우는 C 언어 13. 세 수 (1) | 2020.03.12 |