📍 코드업 1901 - 1부터 n까지 출력하기코드업 1901 - 1부터 n까지 출력하기 Show ⚡️ 나의 풀이재귀함수 문제 중 같은 문제라도 1부터 n까지 구하는 문제가 있는 반면, n부터 1까지 역순으로 구하는 문제도 있다. 재귀함수에서 알아두어야 할 자료구조는 이 문제는 1부터 n까지 구하는 문제인데, 함수의 호출 순서를 알고 싶어 print(f(n))을 설정했다. 전체적인 흐름은 다음과 같다. 입력값에 5가 들어오게 되면 5는 1과 같지않으므로
하단에 사진은 재귀함수 호출의 흐름을 화살표로 그려봤다.
프로그램 1-1 1부터 n 까지 연속한 숫자의 합을 구하는 알고리즘 ① ◉ 예제 소스 p01-1-sum.py # 1부터 n까지 연속한 숫자의 합을 구하는 알고리즘 1 # 입력: n # 출력: 1부터 n까지의 숫자를 더한 값 def sum_n(n): s = 0 # 합을 계산할 변수 for i in range(1, n + 1): # 1부터 n까지 반복(n + 1은 제외) s = s + i return s print(sum_n(10)) # 1부터 10까지의 합(입력: 10, 출력: 55) print(sum_n(100)) # 1부터 100까지의 합(입력: 100, 출력: 5050) 실행 결과 어땠나요? 어렵지 않게 프로그램을 이해하고 입력해서 실행해 볼 수 있었을 것입니다. TIP 프로그램1-1의 알고리즘은 합을 계산할 변수s에0을 넣고 첫 번째 수인1을 더하는 것으로 계산을 시작하였습니다. 즉,1+2 =3이 아니라 0+1 =1이 첫 덧셈입니다. 신간 소식 구독하기 뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요. 1902 : (재귀 함수) 1부터 n까지 역순으로 출력하기문제 설명
입력
출력
입력 예시
출력 예시
풀이 '10.1 리스트 만들기'에서 range에 시작하는 숫자와 끝나는 숫자를 지정하거나, 증가폭을 지정하는 방법을 배웠죠? 이번에는 range의 다양한 기능을 활용하여 for 반복문을 사용해보겠습니다. 16.2.1 시작하는 숫자와 끝나는 숫자 지정하기range에 횟수만 지정하면 숫자가 0부터 시작하지만, 다음과 같이 시작하는 숫자와 끝나는 숫자를 지정해서 반복할 수도 있습니다.
>>> for i in range(5, 12): # 5부터 11까지 반복 ... print('Hello, world!', i) ... Hello, world! 5 Hello, world! 6 Hello, world! 7 Hello, world! 8 Hello, world! 9 Hello, world! 10 Hello, world! 11 5부터 11까지 출력되었죠? for i in range(5, 12):와 같이 지정하면 5부터 11까지 5, 6, 7, 8, 9, 10, 11이 나오고 7번 반복합니다. 즉, 마지막 숫자는 range의 끝나는 숫자보다 1이 작습니다(끝나는 숫자는 생성된 숫자에 포함되지 않음). 16.2.2 증가폭 사용하기range는 증가폭을 지정해서 해당 값만큼 숫자를 증가시킬 수 있죠? 이번에는 0부터 9까지의 숫자 중에서 짝수만 출력해보겠습니다.
>>> for i in range(0, 10, 2): # 0부터 8까지 2씩 증가 ... print('Hello, world!', i) ... Hello, world! 0 Hello, world! 2 Hello, world! 4 Hello, world! 6 Hello, world! 8 for i in range(0, 10, 2):와 같이 range에 0, 10, 2를 넣으면 0부터 8까지 2씩 증가합니다. 따라서 숫자는 0, 2, 4, 6, 8이 나오고 5번 반복하죠. 여기서는 증가폭이 2이므로 8 다음에는 10이 나와야 하지만, range에 끝나는 숫자를 10으로 지정했으므로 10은 포함되지 않고 8에서 멈춥니다. 16.2.3 숫자를 감소시키기for와 range는 숫자가 증가하면서 반복했습니다. 그럼 숫자를 감소시킬 수는 없을까요? >>> for i in range(10, 0): # range(10, 0)은 동작하지 않음 ... print('Hello, world!', i) ... range(10, 0)과 같이 시작하는 숫자를 큰 숫자로 지정하고 끝나는 숫자를 작은 숫자로 지정하면 숫자가 감소할 것 같은데, 실행을 해보면 아무것도 출력되지 않습니다. 왜냐하면 range는 숫자가 증가하는 기본 값이 양수 1이기 때문입니다. '10.1 리스트 만들기'에서 range에 증가폭을 음수로 지정하면 숫자가 감소한다고 했죠? 다음과 같이 증가폭을 음수로 지정해서 반복해봅니다. >>> for i in range(10, 0, -1): # 10에서 1까지 1씩 감소 ... print('Hello, world!', i) ... Hello, world! 10 Hello, world! 9 Hello, world! 8 ... (생략) Hello, world! 2 Hello, world! 1 range(10, 0, -1)은 10부터 1까지 -1씩 증가하는 숫자를 생성합니다. 따라서 10부터 1까지 1씩 감소하면서 반복합니다. 특히 range의 끝나는 숫자 0은 생성되는 숫자에 포함되지 않으므로 1까지만 감소합니다. range는 그냥 증가, 감소에 상관없이 끝나는 숫자는 생성되는 숫자에 포함되지 않는다는 점만 기억하면 됩니다. 증가폭을 음수로 지정하는 방법 말고도 reversed를 사용하면 숫자의 순서를 반대로 뒤집을 수 있습니다.
>>> for i in reversed(range(10)): # range에 reversed를 사용하여 숫자의 순서를 반대로 뒤집음 ... print('Hello, world!', i) # 9부터 0까지 10번 반복 ... Hello, world! 9 Hello, world! 8 Hello, world! 7 ... (생략) Hello, world! 1 Hello, world! 0 range(10)으로 0부터 9까지 숫자를 생성한 뒤 reversed를 사용하여 숫자의 순서를 반대로 뒤집었습니다. 따라서 9부터 0까지 10번 반복합니다. 참고 | 반복문의 변수 i를 변경할 수 있을까? 다음과 같이 for와 range로 반복하면서 변수 i를 변경하면 어떻게 될까요? >>> for i in range(10): ... print(i, end=' ') ... i = 10 ... 0 1 2 3 4 5 6 7 8 9 반복할 코드에서 변수 i에 10을 할당하여 10이 출력될 것 같은데, 0부터 9까지 출력되었습니다. 왜냐하면 변수 i는 반복할 때마다 다음 값으로 덮어써지기 때문에 값을 할당해도 변수에 영향을 주지 못합니다. 16.2.4 입력한 횟수대로 반복하기이번에는 입력한 횟수대로 반복을 해보겠습니다. 다음 내용을 IDLE의 소스 코드 편집 창에 입력하세요. for_range_input.py count = int(input('반복할 횟수를 입력하세요: ')) for i in range(count): print('Hello, world!', i) 소스 코드를 실행하면 '반복할 횟수를 입력하세요: '가 출력됩니다. 여기서 3을 입력하고 엔터 키를 누르세요. 실행 결과 반복할 횟수를 입력하세요: 3 (입력) Hello, world! 0 Hello, world! 1 Hello, world! 2 3을 입력했으므로 'Hello, world!'가 3번 출력됩니다. 먼저 input으로 입력 값을 받아서 count 변수에 저장합니다(이때 반드시 int를 사용하여 input에서 나온 문자열을 정수로 변환해줍니다). 그리고 반복문에서는 for i in range(count):와 같이 range에 count를 넣어주면 입력받은 숫자만큼 반복됩니다. |