상세 컨텐츠

본문 제목

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

C언어

by idea8590 2026. 2. 4. 06:42

본문

반응형

CodeUp 기초 100제 중 1085번부터 1088번까지는 데이터의 저장 용량을 계산하는 실생활 응용 문제와, 반복문의 흐름을 강제로 제어하는 제어문(break, continue)을 익히는 구간입니다.

앞선 문제들이 반복문을 '어떻게 돌리느냐'에 집중했다면, 이번 단계에서는 큰 데이터를 처리할 때의 자료형 선택반복문을 중간에 멈추거나 건너뛰는 정교한 제어를 배울 수 있습니다.


1085 : [기초-종합] 소리 파일 저장용량 계산하기

소리를 저장할 때 필요한 저장 공간(MB)을 계산하는 문제입니다. CD 음질(44.1KHz, 16bit, 2channel) 등의 오디오 데이터 크기를 직접 계산해 봅니다.

소스 코드

C
 
#include <stdio.h>

int main() {
    long long h, b, c, s; // 입력값이 곱해지면 매우 커지므로 long long 사용 권장
    double total_mb;      // 최종 결과는 소수점이므로 double형 사용

    scanf("%lld %lld %lld %lld", &h, &b, &c, &s);

    // 비트(bit) 단위 총합 계산 후 -> 바이트(8) -> 킬로바이트(1024) -> 메가바이트(1024)로 나눔
    // 나눗셈을 위해 8.0 등으로 나누어 실수 연산 유도
    total_mb = (h * b * c * s) / 8.0 / 1024 / 1024;

    printf("%.1lf MB", total_mb); // 소수점 첫째 자리까지 출력

    return 0;
}

 

예시 입력 / 출력

[입력]
44100 16 2 10

[출력]
1.7 MB

문제 해설

이 문제의 핵심은 단위 변환자료형의 범위(Overflow) 이해입니다.

  1. 계산 공식: h * b * c * s를 모두 곱하면 전체 '비트(bit)' 수가 나옵니다.
  2. 단위 변환:
    • 8 bit = 1 Byte
    • 1024 Byte = 1 KB
    • 1024 KB = 1 MB 따라서 전체 비트를 8 * 1024 * 1024로 나누어야 MB 단위가 됩니다.
  3. 자료형 주의: 입력된 네 수를 곱하면 int의 범위를 넘어설 수 있습니다. 따라서 안전하게 long long을 사용하거나, 계산 과정에서 double로 캐스팅해야 정확한 값을 얻을 수 있습니다.

1086 : [기초-종합] 그림 파일 저장용량 계산하기

1085번과 유사하게, 이번에는 이미지 파일의 해상도(가로, 세로)와 비트 깊이를 이용해 저장 용량을 계산합니다.

소스 코드

C
 
#include <stdio.h>

int main() {
    long long w, h, b; // 큰 수의 곱셈을 대비해 long long 선언
    double total_mb;

    scanf("%lld %lld %lld", &w, &h, &b);

    // 가로 * 세로 * 비트수 = 총 비트
    // 8로 나누면 Byte, 1024로 나누면 KB, 다시 1024로 나누면 MB
    total_mb = (w * h * b) / 8.0 / 1024 / 1024;

    printf("%.2lf MB", total_mb); // 소수점 둘째 자리까지 출력

    return 0;
}

 

예시 입력 / 출력

[입력]
1024 768 24

[출력]
2.25 MB

문제 해설

소리 파일 계산과 원리는 동일합니다. 가로($w$) $\times$ 세로($h$) 픽셀에 픽셀당 비트($b$)를 곱해 전체 용량을 구합니다.

  • 1085번은 소수점 첫째 자리(%.1lf)까지, 1086번은 소수점 둘째 자리(%.2lf)까지 출력해야 한다는 출력 형식의 차이를 주의하세요.
  • 나누기 연산 시 8이 아니라 8.0으로 나누거나, 변수 중 하나를 실수형으로 변환해야 소수점 아래 값이 잘리지 않고 계산됩니다.

1087 : [기초-종합] 여기까지! 이제 그만~

1, 2, 3... 순서대로 계속 더해나갈 때, 그 합이 입력된 정수보다 같거나 커지는 순간 멈추고 그때까지의 합을 출력하는 문제입니다.

소스 코드

C
 
#include <stdio.h>

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

    for(i = 1; ; i++) { // 조건식이 비어있으면 무한 루프
        sum += i;       // sum에 i를 누적해서 더함
        if(sum >= n) {  // 합계가 입력값 n보다 크거나 같아지면
            break;      // 반복문을 즉시 탈출!
        }
    }

    printf("%d", sum);

    return 0;
}

예시 입력 / 출력

[입력]
57

[출력]
66

문제 해설

break 문의 활용이 핵심입니다.

  • for문의 조건식을 비워두거나 while(1)을 사용하면 무한히 반복합니다.
  • 반복문 내부에서 if문을 사용하여 "합(sum)이 입력값(n) 이상이 되었는가?"를 검사합니다.
  • 조건이 참(True)이 되면 break를 만나 반복문을 즉시 빠져나옵니다.
  • 주의: 출력해야 하는 값은 마지막에 더해진 숫자 i가 아니라, 누적된 합계 sum입니다.

1088 : [기초-종합] 3의 배수는 통과?

1부터 입력받은 숫자까지 출력하되, 3의 배수인 경우에는 출력하지 않고 건너뛰는 문제입니다.

소스 코드

C
 
#include <stdio.h>

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

    for(i = 1; i <= n; i++) {
        if(i % 3 == 0) { // i가 3의 배수라면
            continue;    // 아래 코드를 실행하지 않고, 증감식(i++)으로 이동
        }
        printf("%d ", i);
    }

    return 0;
}

예시 입력 / 출력

[입력]
10

[출력]
1 2 4 5 7 8 10

문제 해설

continue 문의 활용이 핵심입니다.

  • break가 반복문을 아예 깨뜨리고 나가는 것이라면, continue는 **"이번 회차만 건너뛰고 다음 회차로 넘어가라"**는 명령입니다.
  • i가 3으로 나누어떨어질 때(i % 3 == 0) continue가 실행되면, 그 아래에 있는 printf 함수는 실행되지 않고 바로 i++로 넘어가게 됩니다.
  • 결과적으로 3, 6, 9... 등 3의 배수는 화면에 출력되지 않습니다.

핵심 요약

  1. 큰 수의 연산 (Overflow 방지): 연산 결과가 int 범위(약 21억)를 넘을 것으로 예상될 때는 long long 자료형을 쓰거나 double 형변환을 적절히 사용해야 합니다.
  2. 단위 변환: 컴퓨터 저장 단위는 $1024$배씩 커진다는 점을 기억하세요 (Byte $\rightarrow$ KB $\rightarrow$ MB).
  3. 반복문 제어:
    • break: 반복문을 완전히 종료하고 탈출합니다. (목표 달성 시 멈출 때 사용)
    • continue: 남은 코드를 무시하고 다음 반복으로 넘어갑니다. (특정 조건만 제외할 때 사용)
반응형

관련글 더보기