분기·반복·배열 추적

정보처리실무 · 프로그래밍 언어·코드 해석

이 페이지의 목차

학습 목표

변수표에 반복 회차, 조건, 갱신값, 출력값을 한 줄씩 쓴다.

본문

핵심 이론

if/else는 참인 경로만 실행한다. 일반적인 C·Java switch 문은 break가 없으면 다음 case로 이어질 수 있으며 Java의 화살표 case와는 구별한다.

for는 초기화 → 조건 → 본문 → 갱신 순서다. while은 조건부터, do-while은 본문부터 실행한다. 경계의 <와 <= 차이가 반복 횟수를 바꾼다.

break는 가장 가까운 반복문·switch를 끝내며 continue는 다음 반복으로 이동한다. 중첩 반복에서 내부와 외부 인덱스를 섞지 않는다.

배열 인덱스는 0부터 시작한다. 이차원·가변 길이 배열은 행마다 길이가 다를 수 있다. 갱신 전 값과 갱신 후 값을 나눠 쓰면 누적합·역순·정렬 추적이 쉬워진다.

반복문은 한 바퀴의 실행 순서부터

for(초기식; 조건식; 증감식)은 초기식 한 번 → 조건 확인 → 본문 → 증감식 → 조건 확인 순서다. continue는 현재 본문의 남은 부분을 건너뛰지만 for문의 증감식은 실행한다. break는 가장 가까운 반복문 또는 switch를 끝낸다. 중첩 반복 전체를 무조건 끝내는 명령이 아니다.

배열에서 a[i]는 i번째 저장 칸이다. 길이가 4이면 유효한 인덱스는 0~3이고 i <= 4까지 접근하면 범위를 벗어난다. 반복 중 배열을 바꾸면 다음 반복은 바뀐 배열을 읽는다.

i조건실행누적 s
0i < 40 더함0
1i < 41 더함1
2i < 4continue로 더하기 생략1
3i < 43 더함4
4거짓종료4

이는 s=0; for(i=0;i<4;i++){if(i==2)continue; s+=i;}의 추적이다. 중첩 반복은 바깥 인덱스를 고정한 채 안쪽 표를 끝까지 작성한 다음 바깥 인덱스를 바꾼다. Java 가변 길이 배열에서는 행마다 길이가 다를 수 있으므로 열 조건을 실제 행의 길이와 대조한다.

풀이 예시

다음 C17 프로그램이 표준 출력에 기록하는 내용을 쓰시오. 마지막 줄바꿈의 유무는 답안에서 구별하지 않는다.

C
#include <stdio.h>
int main(void) {
    int a[2][3] = {{2, 1, 4}, {3, 5, 2}};
    for (int r = 0; r < 2; r++)
        for (int c = 1; c < 3; c++)
            a[r][c] += a[r][c - 1];
    printf("%d %d\n", a[0][2], a[1][2] - a[0][1]);
    return 0;
}
정답과 풀이 보기

예시 정답

예시·텍스트
7 7

풀이 과정

각 행을 왼쪽부터 제자리 누적한다. 첫 행은 [2,3,7], 둘째 행은 [3,8,10]이다. 따라서 7과 10-3=7을 출력한다.