인프런 커뮤니티 질문&답변

arginine님의 프로필 이미지
arginine

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

섹션 1 switch-case문 기출문제-1 질문

해결된 질문

작성

·

89

0

KakaoTalk_20240714_191330736.png안녕하세요.

맨 처음에 제가 혼자 풀었을 때는 정답이

DDBCD로 나왔습니다.

제가 풀이를 이런 과정으로 했는데요.

1) n의 0번 인덱스에 있는 73을 sum에 가산 -> 73/30=2 -> default에 있는 "D" 출력

2) n의 1번 인덱스에 있는 95를 sum에 가산 -> 168/30=5 -> default에 있는 "D" 출력

3) n의 2번 인덱스에 있는 82를 sum에 가산 -> 250/3=8 -> case 8부터 default까지의 "BCD" 출력

제 풀이대로 되지 않는 이유가 for문의 중괄호가 switch case문을 감싸고 있지 않아서 그런 건가요?

또, switch case문이 for문의 중괄호에 포함이 되면 제가 작성한 답이 출력이 되나요?

혼자서 이해해보려고 노력했는데 개념이 부족해서 이렇게 질문 올려봅니다. 감사합니다.

답변 1

1

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요,

 

말씀하신 대로 되려면 for 반복문 안에 switch문이 통째로 들어가야 합니다.

지금은 반복문이 모두 끝난 이후에 switch문을 만나기 때문에 sum이 정해져서 들어갑니다.

 

말씀하신 대로 매번 sum을 판단해서 넣으려면

전체를 다 반복문에 넣어서 한 번 반복될 때마다 switch문을 타서 출력하게 해야 합니다.

 

#include <stdio.h>

int main() {
    int n[3] = {73, 95, 82}; // 배열 선언 및 초기화
    int sum = 0;             // sum을 0으로 초기화

    // 배열 요소의 합을 계산
    for (int i = 0; i < 3; i++) {
        sum += n[i];

        switch (sum / 30) {
            case 10:
            case 9:
                printf("A");
            case 8:
                printf("B");
            case 7:
                printf("C");
            default:
                printf("D");
        }
    }

    return 0;
}

이렇게 되면 값이 DDBCD가 됩니다.

 

여기서 근데 주의하셔야 할 점이 있습니다. 만약 case 8 아래에 break;문이 있으면 어떻게 될까요?

#include <stdio.h>

int main() {
    int n[3] = {73, 95, 82}; // 배열 선언 및 초기화
    int sum = 0;             // sum을 0으로 초기화

    // 배열 요소의 합을 계산
    for (int i = 0; i < 3; i++) {
        sum += n[i];

        // sum / 30에 기반한 스위치 문
        switch (sum / 30) {
            case 10:
            case 9:
                printf("A");
            case 8:
                printf("B");
                break;
            case 7:
                printf("C");
            default:
                printf("D");
        }
    }

    return 0;
}

 

이렇게 되면 DDB가 됩니다. 저 break문은 반복문 자체도 깨고 나오기 때문에 다음 반복이 진행되지 않습니다.

arginine님의 프로필 이미지
arginine

작성한 질문수

질문하기