직접 풀어보자! 반복과 누적 5문제
안녕, 나 코딩냥이다냥! 오늘 문제는 다섯 개라냥. 앞의 셋은 배운 걸 하나씩 확인하는 것이고, 뒤의 둘은 여러 개를 엮어야 풀린다냥. 순서대로 가자냥.
막혔을 때 제일 좋은 방법
개념 페이지에서 쓴 것처럼 표를 그려보자냥. 한 바퀴마다 변수가 어떻게 변하는지 손으로 서너 줄만 적어보면, 머리로만 씨름할 때보다 훨씬 빨리 보인다냥.
n 을 입력받아 1부터 n까지 모두 더한 값을 출력하는 문제다냥.
range(n) 이 아니라 range(1, n + 1) 이라냥. +1 을 빠뜨리면 n 이
빠져서 답이 딱 n 만큼 모자라게 나온다냥.
답이 조금 작게 나오면 이걸 제일 먼저 의심하자냥.
n = int(input())
total = 0
for i in range(1, n + 1):
# 여기서 total 에 더한다냥
pass
print(total)n 을 입력받아 1부터 n까지 모두 곱한 값을 출력하는 문제다냥.
1번과 뼈대가 똑같다냥. 딱 두 군데만 다르다냥.
- 상자 시작값:
0이 아니라1 - 갱신:
+가 아니라*
시작값을 0으로 두면 답이 무조건 0이 나온다냥.
n = int(input())
result = 1
for i in range(1, n + 1):
# 여기서 result 에 곱한다냥
pass
print(result)n 부터 1까지 거꾸로 출력하는 문제다냥.
range 의 세 번째 자리에 음수를 넣으면 거꾸로 간다냥.
range(n, 0, -1) 은 n부터 시작해서 0 직전까지, 1씩 빼면서 간다냥.
0 직전까지니까 마지막은 1 이라냥.
출력 형식을 문제에서 확인하자냥. 한 줄씩인지 한 줄에 모아서인지에 따라
print 쓰는 법이 달라진다냥.
n = int(input())
for i in range(n, 0, -1):
pass숫자를 입력받아 각 자리 숫자를 모두 더한 값을 출력하는 문제다냥.
1234 면 1+2+3+4 라서 10 이라냥.
개념 페이지의 사탕 꺼내기를 그대로 쓰면 된다냥.
n % 10으로 맨 뒤 자리를 꺼내 더하고n // 10으로 그 자리를 버린다냥n이 0이 될 때까지while로 반복한다냥
문자열로 바꿔서 푸는 방법도 있다냥. 먼저 while 로 풀어보고, 다 풀었으면
문자열 방법으로도 한 번 짜보면 좋다냥. 두 방법을 다 아는 게 중요하다냥.
n = int(input())
total = 0
while n > 0:
# 맨 뒤 자리를 더하고, 그 자리를 버린다냥
pass
print(total)오늘의 마지막이자 제일 어려운 문제다냥. 앞의 두 수를 더해 만든 수열의 n번째 값을 구한다냥.
상자가 두 개 필요하다냥. 그리고 갱신은 반드시 한 줄로 해야 한다냥.
a, b = b, a + b # 맞다냥두 줄로 쪼개면 a 가 먼저 바뀌어서 틀린 답이 나온다냥.
피보나치는 문제마다 1번째가 무엇인지가 다르다냥. 어떤 데선 1, 1 로
시작하고 어떤 데선 0, 1 로 시작한다냥.
문제의 예시 입력과 출력을 보고 맞춰야 한다냥. 로직이 맞아도 시작값이나 반복 횟수가 한 칸 어긋나면 오답이 된다냥. 예시로 손 계산을 꼭 해보자냥.
n = int(input())
a, b = 1, 1
# 몇 번 돌아야 하냥? 예시로 확인하고 정하자냥
print(a)다 풀었냥?
1번과 2번이 사실상 같은 코드였다는 걸 봤냥? 시작값과 연산자만 바꿨을 뿐이라냥. 알고리즘은 이렇게 같은 뼈대를 조금씩 비틀어 쓰는 일이 많다냥.
스스로 점검해보자냥
- 다섯 문제를 전부 채점기에서 통과했냥?
range(1, n + 1)에서+1이 왜 필요한지 설명할 수 있냥?- 합은 0, 곱은 1로 시작하는 이유를 규칙이 아니라 이유로 말할 수 있냥?
while을 써야 하는 상황과for로 충분한 상황을 구분할 수 있냥?
여기까지 오면 문제를 봤을 때 "아, 이건 훑으면서 쌓는 거네" 하는 감이 슬슬 잡힐 거다냥. 그 감이 알고리즘 공부의 진짜 재산이라냥. 다음 시간엔 정렬을 배워서 "가장 큰 값" 말고 "두 번째로 큰 값" 같은 것도 찾아본다냥. 가보자냥~
