상세 컨텐츠

본문 제목

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

C언어

by idea8590 2026. 2. 3. 23:24

본문

반응형

CodeUp 기초 100제 중 1076번부터 1080번까지는 프로그래밍의 꽃이라 불리는 반복문(Iteration)의 심화 및 응용 단계입니다. 앞선 단계에서 단순한 반복을 배웠다면, 이번 구간에서는 문자(char)를 순서대로 나열하거나, 특정 조건에 도달할 때까지 합계(Sum)를 누적하는 등 보다 논리적이고 동적인 흐름 제어를 연습하게 됩니다.

컴퓨터가 인간보다 압도적으로 뛰어난 점은 지치지 않고 수만 번, 수억 번의 연산을 정확하게 반복할 수 있다는 것입니다. 이 구간의 문제들은 for, while, do-while 문을 상황에 맞게 골라 쓰는 능력을 기르고, 반복문 내부에서 if문과 break를 조합하여 원하는 시점에 정확히 멈추는 정교한 제어 능력을 키우는 데 목적이 있습니다. 알고리즘 문제 해결의 핵심인 '누적 연산'과 '임계값(Threshold) 판단'의 기초가 되므로 확실히 익혀두어야 합니다.


1076 : [기초-반복실행구조] 문자 1개 입력받아 알파벳 출력하기 영문자 1개(a ~ z)를 입력받아, 'a'부터 입력받은 문자까지 순서대로 공백을 두고 출력해보자.

소스 코드

#include <stdio.h>

int main() {
    char c, t = 'a'; // 시작 문자는 'a'로 초기화
    scanf("%c", &c);

    do {
        printf("%c ", t);
        t++; // 문자 값을 1 증가 (a -> b -> c ...)
    } while(t <= c); // 현재 문자가 입력된 문자보다 작거나 같을 동안 반복

    return 0;
}

예시 입력 / 출력

[입력]
f

[출력]
a b c d e f

문제 해설 컴퓨터 내부에서 문자(char)는 고유한 정수 값(아스키 코드)으로 저장되어 처리됩니다. 그렇기 때문에 문자 변수에도 숫자처럼 증감 연산자(t++)를 사용하여 다음 알파벳으로 넘길 수 있고, 비교 연산자(t <= c)를 통해 순서를 비교할 수도 있습니다. 이 코드는 do-while문을 사용하여 일단 문자를 먼저 출력하고 증가시킨 뒤, 입력받은 문자에 도달했는지 검사하여 반복 여부를 결정합니다.


1077 : [기초-반복실행구조] 정수 1개 입력받아 그 수까지 출력하기 정수 1개(n)를 입력받아 0부터 n까지의 정수를 한 줄에 하나씩 출력해보자.

소스 코드


 
#include <stdio.h>

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

    for(i = 0; i <= n; i++) { // i는 0부터 n까지 1씩 증가
        printf("%d\n", i);
    }

    return 0;
}

예시 입력 / 출력

[입력]
4

[출력]
0
1
2
3
4

문제 해설 반복의 시작점(0)과 끝점(n), 그리고 증가폭(1씩 증가)이 명확하게 정해져 있는 경우에는 for문을 사용하는 것이 가장 구조적이고 코드가 깔끔합니다. for(초기화; 조건식; 증감식)의 구조를 활용하여 변수 i가 0부터 시작해서 n이 될 때까지 1씩 커지며 내부의 출력문을 반복 실행하게 됩니다.


1078 : [기초-종합] 짝수 합 구하기 정수 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자.

소스 코드

 
#include <stdio.h>

int main() {
    int n, i, sum = 0; // 합을 담을 변수는 반드시 0으로 초기화
    scanf("%d", &n);

    for(i = 1; i <= n; i++) {
        if(i % 2 == 0) { // i가 짝수라면
            sum += i;    // sum에 i를 더해서 누적
        }
    }
    
    printf("%d", sum);

    return 0;
}

예시 입력 / 출력

 
[입력]
5

[출력]
6

문제 해설 값을 계속해서 더해나가는 '누적 합(Accumulation)'을 구하는 문제입니다. 합계 결과를 담을 변수(sum)는 처음에 쓰레기 값이 들어있을 수 있으므로 반드시 선언과 동시에 0으로 초기화해야 합니다. 반복문 안에서 if(i % 2 == 0) 조건을 이용해 짝수일 때만 sum 변수에 현재 숫자 i를 더해주는 방식으로 짝수의 합만 골라낼 수 있습니다.


1079 : [기초-종합] 원하는 문자가 입력될 때까지 반복 출력하기 문자들이 공백으로 구분되어 입력될 때, 'q'가 입력될 때까지 입력된 문자를 줄을 바꿔 한 줄에 하나씩 출력하고, 'q'가 입력되면 그 문자까지 출력하고 종료해보자.

소스 코드

#include <stdio.h>

int main() {
    char c;
    
    while(1) { // 조건이 1(참)이므로 무한 루프
        scanf(" %c", &c); // 공백을 건너뛰고 문자 입력받기
        printf("%c\n", c);
        
        if(c == 'q') break; // 입력받은 문자가 'q'면 반복 종료
    }

    return 0;
}

예시 입력 / 출력

[입력]
x b k d l q g a c

[출력]
x
b
k
d
l
q

문제 해설 입력이 언제 끝날지 횟수를 알 수 없을 때는 while(1)을 사용하여 무한 루프를 만듭니다. 반복문 내부에서 입력을 받고 문자를 출력한 뒤, if(c == 'q') break; 문장을 통해 종료 조건이 충족되면 즉시 반복문을 탈출하도록 설계합니다. scanf 사용 시 %c 앞에 공백을 한 칸 넣어주면(" %c") 입력 버퍼에 남아있는 엔터나 공백을 무시하고 문자만 정확히 읽어올 수 있습니다.


1080 : [기초-종합] 언제까지 더해야 할까? 1, 2, 3... 을 계속 더해 나갈 때, 그 합이 입력한 정수(target)보다 같거나 커지는 시점의 마지막 더한 숫자를 출력해보자.

소스 코드

#include <stdio.h>

int main() {
    int target, i = 0, sum = 0;
    scanf("%d", &target);

    while(sum < target) { // 합이 목표값보다 작은 동안 반복
        i++;       // 숫자 증가 (1, 2, 3...)
        sum += i;  // 합계 누적
    }

    printf("%d", i); // 합이 target 이상이 되었을 때의 마지막 숫자 출력

    return 0;
}

예시 입력 / 출력

 
[입력]
55

[출력]
10

문제 해설 조건에 따라 반복을 멈추는 '임계값(Threshold)' 처리 문제입니다. while(sum < target) 조건은 "합계가 아직 목표값보다 작다면 계속 더하라"는 의미입니다. 반복하다가 sum이 target과 같아지거나 커지는 순간 조건이 거짓이 되어 반복문이 종료됩니다. 이때 마지막으로 더했던 숫자가 i에 저장되어 있으므로, 반복 종료 후 i를 출력하면 정답이 됩니다.


핵심 요약

  • 문자 연산: char 타입은 정수처럼 **증감(t++)이나 비교(t <= c) 연산이 가능하여 알파벳 순서대로 처리가 가능합니다.
  • 초기화 필수: 합계를 구하는 누적 변수(sum)는 선언 시 반드시 0으로 초기화해야 엉뚱한 값이 더해지는 것을 막을 수 있습니다.
  • 무한 루프와 break: 횟수를 모를 때는 while(1)을 쓰고, 내부에서 특정 조건(if) 만족 시 break;로 빠져나오는 패턴이 매우 중요합니다.
  • 조건의 순서: 1080번 문제처럼 변수 증가(i++)와 합계 누적(sum += i)의 순서, 그리고 조건식(sum < target) 설정이 결과값에 큰 영향을 미치므로 논리적인 순서를 잘 따져야 합니다.
반응형

관련글 더보기