Python 2차원 리스트와 중첩 반복문 문제 풀이(Claude)

2026. 7. 11. 15:29파이썬

📌 문제

다음 Python으로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.

a = [[1,1,0,1,0],
     [1,0,1,0]]
tot,totsu = 0, 0
for i in a:
    for j in i:
        tot += j
    totsu = totsu + len(i)
print(totsu, tot)

단계별 실행

a는 리스트를 담은 리스트(2차원 리스트)입니다.

a[0] = [1, 1, 0, 1, 0]   (길이 5)
a[1] = [1, 0, 1, 0]      (길이 4)

바깥 반복문 — i는 a의 각 줄(하위 리스트) 안쪽 반복문 — j는 그 줄에 담긴 각 숫자

1번째 바깥 반복 (i = [1,1,0,1,0])

안쪽 반복으로 tot에 각 숫자를 더합니다.

tot = 0 + 1 + 1 + 0 + 1 + 0 = 3

안쪽 반복이 끝난 후, totsu에 len(i)(리스트 길이 5)를 더합니다.

totsu = 0 + 5 = 5

2번째 바깥 반복 (i = [1,0,1,0])

tot = 3 + (1+0+1+0) = 3 + 2 = 5
totsu = 5 + 4 = 9

출력

print(totsu, tot)

✅ 최종 실행 결과

9 5

⚠️ 함정 포인트

  1. totsu는 개수(길이)의 합이고, tot은 숫자 값들의 합입니다. 이름이 비슷해서 헷갈리기 쉽습니다.
  2. totsu = totsu + len(i)는 안쪽 for문의 바깥에 있습니다(들여쓰기 확인). 그래서 숫자 하나마다가 아니라 바깥 반복 1번당 딱 한 번씩만 실행됩니다.
  3. 출력 순서가 (totsu, tot) — 변수를 선언한 순서(tot, totsu)와 반대로 출력하므로 9 5가 되지, 5 9가 아닙니다.
  4. 들여쓰기가 로직을 결정한다 — totsu 갱신 줄이 안쪽 for문과 같은 들여쓰기인지 다른지에 따라 결과가 완전히 달라집니다.

🎯 핵심 개념 정리

2차원 리스트 (리스트의 리스트)

a = [[1, 2], [3, 4, 5]]
a[0]        # [1, 2]
a[1]        # [3, 4, 5]
len(a[1])   # 3 (하위 리스트의 길이)

중첩 for문

바깥 반복문이 한 번 돌 때마다, 안쪽 반복문이 전체를 한 바퀴 돕니다.

for i in [[1,2],[3,4]]:
    for j in i:
        print(j, end=' ')
# 1 2 3 4

들여쓰기 위치가 실행 시점을 결정

for i in a:
    for j in i:
        tot += j          # 숫자 하나마다 실행
    totsu += len(i)         # i(한 줄) 처리가 끝날 때마다 실행

같은 줄을 for j in i: 안으로 넣으면 결과가 완전히 달라집니다.


✍️ 시험 답안용 한 줄 풀이

a의 첫 번째 줄 [1,1,0,1,0]은 합이 3, 길이가 5이고, 두 번째 줄 [1,0,1,0]은 합이 2, 길이가 4이다. tot은 두 줄의 합을 모두 더한 5, totsu는 두 줄의 길이를 더한 9가 된다. print(totsu, tot)이므로 출력은 9 5이다.


🧠 미니 퀴즈

  1. totsu = totsu + len(i)를 안쪽 for j in i: 문 안으로 옮기면 결과는 어떻게 될까요?
  2. a에 [1,1,1]을 세 번째 줄로 추가하면 tot과 totsu는 각각 얼마가 될까요?
  3. print(totsu, tot)을 print(tot, totsu)로 바꾸면 출력은?

정답

  1. totsu가 j가 실행될 때마다(즉 숫자 하나당 한 번씩) 더해지므로, 전체 숫자 개수만큼 len(i)가 반복해서 더해집니다. 첫 줄에서 5번 반복하며 매번 5씩 더하고(총 25), 둘째 줄에서 4번 반복하며 매번 4씩 더해서(총 16), totsu = 25+16 = 41이 됩니다. tot은 그대로 5.
  2. [1,1,1]의 합은 3, 길이는 3이므로 tot = 5+3 = 8, totsu = 9+3 = 12
  3. 5 9 — 순서만 바뀌어서 그대로 출력됩니다.