상세 컨텐츠

본문 제목

[CodeUp] C언어 기초 100제 풀이 (1071번 ~ 1075번)

C언어

by idea8590 2026. 2. 3. 22:45

본문

반응형

CodeUp 기초 100제 중 1071번부터 1075번까지는 **반복문(Iteration Structure)**의 기초를 다룹니다. 특히 이 구간에서는 C언어의 초기 문법인 goto문을 통한 무조건 분기와, 보다 구조적인 while문의 사용법을 익히게 됩니다. 반복문은 프로그램이 특정 작업을 자동으로 되풀이하게 만드는 핵심 요소이므로, 조건 검사와 카운트다운 로직의 흐름을 머릿속으로 그려보는 것이 중요합니다.


1071 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기

정수가 순서대로 입력될 때, 0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자. (이 문제는 goto 명령어를 익히기 위해 설계되었습니다.)

소스 코드

C
 
#include <stdio.h>

int main() {
    int n;
reload: // 레이블 정의: 이동할 위치를 표시
    scanf("%d", &n);
    
    if(n != 0) {
        printf("%d\n", n);
        goto reload; // reload 레이블로 이동하여 코드 다시 실행
    }

    return 0;
}

예시 입력 / 출력

[입력]
7 4 2 3 0 1 5

[출력]
7
4
2
3

문제 해설 goto문은 프로그램의 흐름을 지정된 '레이블(Label, 위 코드의 reload:)' 위치로 무조건 건너뛰게 만듭니다. scanf로 숫자를 받고, 그 숫자가 0이 아니라면 printf를 실행한 뒤 다시 reload 위치로 돌아가 입력을 받는 과정을 반복합니다. 0이 입력되면 if문의 조건이 거짓이 되어 goto를 만나지 않고 프로그램이 종료됩니다. (현대 프로그래밍에서는 가독성을 위해 goto 사용을 지양하지만, 반복의 원리를 이해하는 데 도움이 됩니다.)


1072 : [기초-반복실행구조] 정수 입력받아 계속 출력하기

입력받을 정수의 개수(n)가 주어지고, 그 뒤에 n개의 정수가 입력될 때, 입력된 정수들을 순서대로 출력해보자.

소스 코드

C
 
#include <stdio.h>

int main() {
    int n, m;
    scanf("%d", &n); // 정수의 개수 입력

reget: // 레이블
    scanf("%d", &m);
    printf("%d\n", m);
    
    if(--n != 0) goto reget; // n을 1씩 감소시키며 0이 아니면 반복

    return 0;
}

 

예시 입력 / 출력

[입력]
3
1 2 5

[출력]
1
2
5

문제 해설 반복 횟수가 정해져 있는 경우입니다. 처음에 개수 n을 입력받고, goto문을 이용해 숫자를 입력받고 출력하는 과정을 반복합니다. 핵심은 if(--n != 0) 부분인데, 이는 "n을 1 감소시킨 뒤 그 값이 0이 아니면"이라는 뜻입니다. 즉, 입력받은 개수만큼 반복을 수행한 뒤 n이 0이 되면 반복을 멈추게 됩니다.


1073 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기 2

0이 입력될 때까지 입력된 정수를 출력해보자. (1071번과 같지만, 이번에는 goto 대신 while문이나 for문을 사용하는 것이 일반적입니다.)

소스 코드

C
 
#include <stdio.h>

int main() {
    int n = 1; // 0이 아닌 초기값 설정 (반복 진입을 위해)
    
    while(n != 0) {
        scanf("%d", &n);
        if(n != 0) printf("%d\n", n);
    }

    return 0;
}

또는 더 간결한 방식:

C
 
#include <stdio.h>
int main() {
    int n;
    while(1) { // 무한 루프
        scanf("%d", &n);
        if(n == 0) break; // 0이면 반복문 탈출
        printf("%d\n", n);
    }
    return 0;
}

예시 입력 / 출력

 
[입력]
7 4 2 3 0 1 5

[출력]
7
4
2
3

문제 해설 while(조건식)은 조건식이 '참(True)'인 동안 {} 안의 내용을 계속 반복합니다. 첫 번째 방식은 변수 n이 0이 아닌 동안 계속 입력을 받는 방식이고, 두 번째 방식은 while(1)로 무한 루프를 만든 뒤, 입력값이 0일 때 break; 문을 사용하여 반복문을 즉시 빠져나오는 방식입니다. 실무에서는 break를 활용한 두 번째 방식이 자주 쓰입니다.


1074 : [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기 1

정수 1개(n)를 입력받아 n부터 1까지 1씩 줄여가며 한 줄에 하나씩 출력해보자. (예: 5 입력 → 5, 4, 3, 2, 1 출력)

소스 코드

C
 
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);

    while(n > 0) { // n이 0보다 클 때만 반복
        printf("%d\n", n);
        n--; // n을 1 감소시킴
    }

    return 0;
}

예시 입력 / 출력

[입력]
5

[출력]
5
4
3
2
1

문제 해설 카운트다운의 기본 논리입니다. while(n > 0)을 통해 n이 1 이상일 때만 코드가 실행되도록 합니다. 중요한 것은 순서입니다. 먼저 현재의 n을 출력(printf)한 후에 n--(감소 연산자)를 수행해야 입력받은 수부터 1까지 차례대로 출력됩니다.


1075 : [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기 2

정수 1개(n)를 입력받아 (n-1)부터 0까지 1씩 줄여가며 한 줄에 하나씩 출력해보자. (예: 5 입력 → 4, 3, 2, 1, 0 출력)

소스 코드

C
 
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);

    while(n > 0) {
        n--; // 출력을 하기 전에 먼저 감소
        printf("%d\n", n);
    }

    return 0;
}

 

예시 입력 / 출력

[입력]
5

[출력]
4
3
2
1
0

문제 해설 1074번과 유사하지만 출력되는 숫자의 범위가 다릅니다. 이번에는 입력된 수보다 1 작은 수부터 0까지 출력해야 하므로, 반복문 안에서 감소 연산(n--)을 출력(printf)보다 먼저 수행해야 합니다.

  • 1074번: 출력 → 감소 (5 → 4 → ... → 1)
  • 1075번: 감소 → 출력 (4 → 3 → ... → 0) 이처럼 코드 한 줄의 순서 차이가 결과에 큰 영향을 미치므로 실행 순서를 잘 파악해야 합니다.

핵심 요약

  1. goto문: 레이블:과 goto 레이블;을 이용해 코드의 흐름을 자유롭게 이동시킵니다. 복잡하게 쓰면 코드가 꼬이는 '스파게티 코드'가 될 수 있어 주의해야 합니다.
  2. while문: while(조건) 형식으로 조건이 참인 동안 코드를 반복합니다. 반복 횟수가 명확하지 않을 때(예: 0이 입력될 때까지) 주로 사용합니다.
  3. 증감 연산자(--): 반복문에서 카운트다운을 하거나 반복 횟수를 제어할 때 필수적입니다. n--는 n을 사용 후 감소, --n은 감소 후 사용의 의미를 가집니다.
  4. 반복 탈출(break): 무한 루프(while(1)) 안에서 특정 조건(if(n==0))을 만족할 때 break;를 사용하면 반복문을 즉시 종료할 수 있어 흐름 제어가 유연해집니다.
반응형

관련글 더보기