하나씩 훑어보자! 리스트 순회와 탐색
안녕, 나 코딩냥이다냥! 파이썬 문법은 다 배웠지? 반복문도 알고, 리스트도 안다냥. 그런데 막상 문제를 받으면 "어디서부터 손대야 하지?" 하고 멈추게 된다냥. 오늘부터는 그 막막함을 없애는 연습을 할 거다냥. 첫 무기는 순회(하나씩 훑기) 라냥. 알고리즘의 절반은 이걸로 풀린다냥!
오늘의 학습 목표
- 리스트를 처음부터 끝까지 훑는(순회) 패턴을 손에 익힌다.
- 훑으면서 최댓값 찾기 · 합계 구하기 · 조건에 맞는 개수 세기를 직접 만든다.
- 문제를 보고 "이건 한 번 훑으면 되는 문제" 라고 알아채는 감을 기른다.
1단계 · 컴퓨터는 한눈에 못 본다냥 (5분)
질문 하나 할게냥. 숫자 카드 다섯 장이 뒤집혀 있다냥.
[3, 9, 1, 7, 5] 여기서 제일 큰 수가 뭐냥?
너는 눈으로 쓱 보고 바로 9라고 답했을 거다냥.
그런데 컴퓨터는 그게 안 된다냥. 컴퓨터한테 리스트는 뒤집혀 있는 카드 더미와 같다냥. 한 장씩 뒤집어봐야만 그 안에 뭐가 있는지 안다냥.
비유로 이해하기 — 뒤집힌 카드 더미
그래서 알고리즘의 기본은 "하나씩 훑기" 라냥!
2단계 · 순회의 기본 모양 (5분)
훑는 코드는 늘 똑같이 생겼다냥. 이 모양만 외워두면 절반은 끝이라냥!
numbers = [3, 9, 1, 7, 5]
for n in numbers:
print(n)for n in numbers 는 "numbers 안에 든 걸 하나씩 꺼내서 n 이라고 부르자" 라는 뜻이다냥. 카드를 한 장씩 뒤집는 것과 똑같다냥.
꺼낼 카드가 없을 때까지 자동으로 반복된다냥. 카드가 5장이면 5번, 100장이면 100번 돈다냥. 몇 장인지 몰라도 코드는 그대로라는 게 편한 점이라냥!
3단계 · 훑으면서 기억하기 (10분)
그냥 훑기만 하면 아무것도 안 남는다냥. 훑으면서 뭔가를 기억해두는 것, 그게 진짜 기술이라냥. 기억할 상자를 하나 미리 만들어두면 된다냥!
최댓값 찾기
카드를 한 장씩 뒤집으면서 "지금까지 본 것 중 제일 큰 수" 를 계속 갱신한다냥.
numbers = [3, 9, 1, 7, 5]
biggest = numbers[0] # 일단 첫 장을 챔피언으로 둔다냥
for n in numbers:
if n > biggest: # 더 큰 놈이 나오면
biggest = n # 챔피언을 바꾼다냥
print(biggest) # 9biggest = 0 으로 시작하면 안 된다냥!
[-5, -2, -9] 처럼 전부 음수인 리스트에서는 0보다 큰 수가 하나도 없어서
답이 0 이 나와버린다냥. 리스트에 없는 값이 답으로 나오면 안 되겠지?
그래서 첫 번째 원소를 시작값으로 두는 것이 안전하다냥.
합계 구하기
이번엔 기억 상자에 더해나간다냥.
numbers = [3, 9, 1, 7, 5]
total = 0 # 아직 아무것도 안 더했으니 0 이라냥
for n in numbers:
total = total + n # total += n 이라고 짧게 써도 된다냥
print(total) # 25합계는 왜 0 으로 시작해도 괜찮냥? 아무것도 안 더한 상태의 합이 정확히 0
이기 때문이라냥. 최댓값과 달리 여기선 0이 진짜 정답의 출발점이라냥!
조건에 맞는 개수 세기
훑으면서 조건에 맞을 때만 상자를 1씩 늘린다냥.
numbers = [3, 9, 1, 7, 5, 8, 2]
count = 0
for n in numbers:
if n % 2 == 0: # 2로 나눈 나머지가 0이면 짝수라냥
count += 1
print(count) # 2 (8, 2)- 기억할 상자를 만든다 (
biggest/total/count) for로 하나씩 훑는다- 상자를 갱신한다
- 다 훑은 뒤 상자를 출력한다
바뀌는 건 3번뿐이라냥. 이 틀을 외워두면 비슷한 문제는 다 풀린다냥!
4단계 · 몇 번이나 훑을까냥? (5분)
마지막으로 감각 하나만 더 챙겨가자냥. "몇 번 훑었냐" 를 세는 습관이라냥.
위 코드들은 전부 리스트를 딱 한 번 훑는다냥. 카드가 100장이면 100번, 1000장이면 1000번 본다냥. 카드 수가 늘어난 만큼만 느려지니까 아주 착한 코드라냥.
나중에 배울 이야기지만 미리 살짝 알려준다냥. 리스트를 한 번 훑는 걸 O(n) 이라고 부른다냥. 지금은 용어를 외울 필요 없다냥. 대신 이것만 기억하자냥 — "한 번만 훑으면 빠르다, 훑는 안에서 또 훑으면 느려진다."
오늘 배운 내용 정리
배운 걸 머릿속에 콕! 박아넣을 시간이다냥. 먼저 스스로 답해보고, "정답 보기"를 눌러서 맞는지 확인해보자냥!
이제 직접 풀어볼 차례다냥
오늘 배운 뼈대 하나로 문제 세 개를 풀 수 있다냥! 실습 페이지에서 진짜 채점기에 제출해보자냥. 막히면 AI 힌트 버튼을 눌러도 된다냥 — 정답을 알려주진 않고 생각할 방향만 알려준다냥. 가보자냥~
