12. 기초-반복실행구조
- 정수가 순서대로 입력된다.
(단, 개수는 알 수 없다.)
0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자.
while( ), for( ) 등의 반복문을 사용할 수 없다.입력 정수가 순서대로 입력된다. 7 4 2 3 0 1 5 6 9 10 8
출력 입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 종료한다. (0은 출력하지 않는다.) 7 4 2 3
내 풀이)
아무리 고민을 해봐도 반복문 없는 풀이방법이 생각나지않아 강의 영상을 봤다.
강의 풀이)
def goto(array, i): if array[i] == 0: return print(array[i]) i += 1 goto(array, i) array = list(map(int, input().split())) goto(array, i = 0)
Tip:: 원래 이 문제는 goto문을 이용해 풀도록 유도한 것인데 파이썬에서는 goto문을 제공하지 않으므로 함수를 이용하여 풀도록 한다. 파이썬에서는 do~while()과 같은 반복문도 제공하지 않는다. 파이썬에서는 함수를 이용하여 goto문처럼 사용하면 된다.
- n개의 정수가 순서대로 입력된다.
(단 n의 최대 개수는 알 수 없다.)
n개의 입력된 정수를 순서대로 출력해보자.
while( ), for( ) 등의 반복문을 사용할 수 없다.입력 첫 줄에 정수의 개수 n이 입력되고, 두 번째 줄에 n개의 정수가 공백을 두고 입력된다. 5 1 2 3 4 5
출력 n개의 정수를 한 개씩 줄을 바꿔 출력한다. 1 2 3 4 5
내 풀이)
def printNumber(num, i): if i == end: return print(num[i]) i += 1 printNumber(num, i) end = int(input()) num = list(map(int, input().split())) printNumber(num, i = 0)
강의 풀이)
n = int(input()) number = list(map(int, input().split())) #1 print('== #1 ==') def goto(number, n, i): if i == n: return print( number[i] ) i += 1 goto(number, n, i) goto(number, n, 0) _____________________________________________________ #2 reverse 사용 print('== #2 ==') number.reverse() def goto(number, n): print(number[n]) n -= 1 if n == -1: return goto(number, n) goto(number, n-1)
Tip:: 리스트의 메소드인 reverse()는 내부 원소들을 거꾸로 재정렬해준다.
- 정수가 순서대로 입력된다.
(단, 개수는 알 수 없다.)
0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자.입력 정수가 순서대로 입력된다. 7 4 2 3 0 1 5 6 9 10 8
출력 입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 종료한다. (0은 출력하지 않는다.) 7 4 2 3
내 풀이)
num = map(int, input().split()) for i in num: if i == 0: break print(i)
강의 풀이)
#1 number = map(int, input().split()) for element in number: if element is not 0: print(element) continue # continue를 만나면 아래의 구문은 실행하지 않고 다음 반복으로 넘어간다. break ------------------------------------------------------------------------- #2 number = map(int, input().split()) for value in number: if value == 0: break print( value )
- 정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자.
입력 정수 1개가 입력된다. (1 ~ 100) 5
출력 1씩 줄이면서 한 줄에 하나씩 1이 될 때까지 출력한다. 5 4 3 2 1
내 풀이)
number = int(input()) for i in range(number,0,-1): print(i)
강의 풀이)
count = int(input()) for i in range(count, 0, -1): print( i )
- 정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자.
입력 정수 1개가 입력된다. (1 ~ 100) 5
출력 1씩 줄이면서 한 줄에 하나씩 1이 될 때까지 출력한다. 4 3 2 1 0
내 풀이)
number = int(input()) for i in range(number-1 ,0,-1): print(i)
강의 풀이)
count = int(input()) for i in range(count-1, -1, -1): print( i )
1이 될 때까지 출력하는건데 왜 0이 될 때까지 출력하는지 모르겠다.
- 영문자(a ~ z) 1개가 입력되었을 때 그 문자까지의 알파벳을 순서대로 출력해보자.
입력 영문자 1개가 입력된다. (a ~ z) f
출력 a부터 입력한 문자까지 순서대로 공백을 두고 출력한다. a b c d e f
내 풀이)
alphabet =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] abc = input() for i in alphabet: print('{}'.format(i), end =' ') if i == abc: break
강의 풀이)
converter = ord(input()) for i in range(97, converter+1): print( chr(i), end=' ' )
Tip:: 아스키 코드를 이용하면 된다. ord() : 문자를 아스키 코드의 10진수로 변환 ex) 'a' >> 97 chr() : 10진수의 아스키 코드를 문자로 변환 ex) 97 >> 'a' print() 함수의 두번째 파라미터인 end는 줄바꿈을 없애줄 수 있다. default값이 줄바꿈이다.
- 정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자.
입력 정수 1개가 입력된다. (0 ~ 100) 4
출력 0부터 그 수까지 줄을 바꿔 한 개씩 출력한다. 0 1 2 3 4
내 풀이)
number = int(input()) for i in range(0, number + 1, 1): print(i)
강의 풀이)
#1 count = int(input()) i = 0 while count >= 0: print( i ) i += 1 count -= 1 # 2 count = int(input()) for i in range(0, count+1): print( i )
Tip:: for()로 푸는 것이 더 간단하나 while()문의 예를 보여드리기 위해 while로 풀었음.