반복과 패턴 찾기
반복문으로 패턴을 ‘찍어내는’ 감각 키우기: 4-3. 반복과 패턴 찾기
지난 글에서 조건 조합과 논리 설계까지 했잖아?
“이 경우면 이렇게!”를 머릿속에서 딱 정리하는 연습을 했고요. 이제는 그 다음 단계로, 같은 규칙을 여러 번 반복하면서 패턴을 만드는 감각을 키워볼 거야. 솔직히 말하면 여기서부터가 “아, 코딩이 일이 아니고 레고 조립이구나” 싶어지는 구간이더라. 나름 재밌어짐!
반복문이 필요한 이유 (그냥 손으로 하면 안 되잖아…)
예를 들어 구구단처럼 생각해봐.
“2 곱하기 1, 2 곱하기 2, … 2 곱하기 9”를 일일이 타이핑하면… 어? 사람 맞아? 너무 손이 아프지.
반복문은 이런 상황에서 딱 써:
- 규칙이 있으면
- 여러 번 똑같은 형태로 출력/계산해야 하면
바로 반복문이 “야, 이거 또 해”를 대신 해줘.
1) for문: “몇 번 반복할지” 알 때
for문은 보통 이렇게 떠올리면 편해.
“이거 10번 해줘”
“1부터 10까지 쭉 해줘”
예시로 1부터 5까지 출력해보자.
for i in range(1, 6):
print(i)
range(1, 6)은 1~5까지 숫자를 만들어줘i는 매번 하나씩 바뀜
아! 이런 흐름이 익숙해지면, 이후 패턴 찾기가 훨씬 쉬워져.
2) while문: “언제 끝날지” 애매할 때
while문은 내가 원하는 조건이 만족될 때까지 계속 돌아가.
“사용자가 입력할 때까지 계속 물어볼래”
“정답 맞힐 때까지 반복할래”
예시: 사용자가 0을 입력하기 전까지 계속 숫자를 받기
x = None
while x != 0:
x = int(input("숫자를 입력하세요 (0 입력 시 종료): "))
print("입력값:", x)
음… 이거 처음엔 나도 “왜 무한루프 돌지?” 같은 실수 자주 했어.
사실은 종료 조건을 잘못 써서 키보드 두드리다 멘붕 오더라. 지금은 그때 생각하면 웃기지만.
3) 패턴 찾기: “규칙을 문장으로 말해보기”가 핵심
이제 진짜 중요한 파트!
패턴은 보통 이런 식으로 생겨:
- 규칙이 있어
- 변하는 부분/안 변하는 부분이 있어
그래서 내가 추천하는 방법은 이거야:
- 출력 결과를 눈으로 봐
- “어떤 게 늘고/줄고/바뀌는지” 말로 써
- 그 말을 그대로 코드로 옮겨
어떤 패턴이든 거의 이 루트로 가더라.
미니 실습 1) 별(★) 삼각형 찍기
이런 모양 기억나?
- 1줄: ★
- 2줄: ★★
- 3줄: ★★★
“각 줄에서 별 개수가 1, 2, 3으로 증가한다”
이게 바로 규칙 문장!
for row in range(1, 4): # 1부터 3까지
for col in range(row): # col 개수는 row만큼
print("★", end="")
print() # 줄 바꿈
여기서 포인트:
- 바깥 for은 줄(row)
- 안쪽 for은 그 줄에 별(col)
아! 중첩 반복문은 처음에 좀 헷갈리는데, 사실은 “행과 열” 생각하면 금방 잡혀.
미니 실습 2) 홀수만 모으기 (패턴 = 조건도 섞인다!)
패턴이라고 해서 출력만 있는 건 아니야.
데이터에서도 패턴을 찾는 거지. 예를 들어:
1부터 20까지 중 홀수만 출력해줘
이건 반복문 + 조건문 조합이야. (지난 글의 감각이 그대로 이어짐!)
for i in range(1, 21):
if i % 2 == 1:
print(i)
솔직히 말하면, 이거 하다가 한 번쯤은 i % 2 == 0을 써서 짝수를 뽑았을 거야… 나도 그랬고.
그럴 때는 “내가 찾는 패턴이 홀수였지?”를 다시 확인하면 해결됨!
미니 실습 3) 입력 받은 횟수만큼 “웃는 얼굴” 출력하기
여기서부터는 “반복문으로 사용자 인터랙션 느낌까지” 가볼 수 있어.
n = int(input("얼마나 반복할까요? "))
for _ in range(n):
print(":)")
for _ in range(n)에서_는 “난 i가 필요 없어요”라는 뜻이야- 그냥 반복만 할 거라서 변수 이름을
_로 둬
이것도 나름 깔끔한 습관이더라.
반복문에서 자주 하는 실수 3가지 (나만 그런 거 아님…)
- 종료 조건을 잘못 써서 무한루프
- while 쓸 때 특히 주의!
- range 범위 착각
range(1, 6)은 1~5
- 출력 줄바꿈(end="") 실수
print()를 언제 호출하느냐에 따라 모양이 달라져
실패담 하나 더 하면… 별 삼각형 만들다가 줄바꿈이 이상해서
“왜 직사각형이 나오지?” 하면서 한참 멍했었어. 사실 print() 위치만 바꾸면 됐는데 말이지. 에휴.
오늘의 핵심 정리
오늘은 이렇게 가져가면 딱 좋아:
- for: 반복 횟수가 명확할 때
- while: 조건이 맞을 때까지 계속할 때
- 패턴 찾기: 규칙을 말로 먼저 만들고 코드로 옮기기
- 반복문 안에 반복문(중첩)도 자주 나옴
다음 글 예고: 정렬과 탐색의 기초로 넘어간다!
자, 여기까지 하면 “반복해서 뭔가를 만들 수는 있다”가 됐어.
그런데 현실에서는 이렇게 묻잖아?
“이 리스트에서 뭐가 제일 작은 거야?”
“찾고 싶은 게 있으면 빨리 가져와줘!”
바로 다음 포스트인 4-4. 정렬과 탐색의 기초에서 그 감각을 잡아볼 거야.
정렬은 “보기 좋게 정리”하는 거고, 탐색은 “찾는 것”이거든.
음… 사실 여기서부터 알고리즘 냄새가 확 나기 시작해! 나도 기대 중이야.





