본문 바로가기
Algorithm/CodeUp

[CodeUp 기초 100제] 1071 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기1(풀이 성공)

by 전봇대파괴자 2021. 2. 26.

입력:

정수가 순서대로 입력된다.
-2147483648 ~ +2147483647, 단 개수는 알 수 없다.

 

 

출력:

입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 종료한다.
(0은 출력하지 않는다.)


내 코드:

a = list(map(int, input().split()))

for x in a:
    if x != 0:
        print(i)
    else:
        break

 

 

또 다른 풀이:

x=list(map(int, input().split()))
max_idx=len(x)-1 # 리스트 x의 최대 인덱스
i=0

while True: # 조건이 충족되지 않는 한 무한반복
    if x[i]==0:
        break
    else:
        print(x[i])
        i+=1
        if i > max_idx: # i가 최대 인덱스보다 커질 경우 i를 초기값 0으로 되돌린다
            i=0 

 

Comment: 사실 위에 있는 코드는 틀렸다고 보는 게 맞습니다. 저도 처음엔 정확한 풀이라고 뜨길래 맞는 줄 알았는데, for문은 while문처럼 조건을 지정하지 않는 한 무한반복되지 않거든요. 문제에는 틀림없이 '무한 출력'이라고 쓰여 있기 때문에 이 답은 맞는 답이 아닙니다. for x in a: 라고 하면, a 리스트에 있는 모든 값들을 끝까지 출력한 후에는 자동적으로 코드 실행이 멈추거든요.

 

이 문제를 풀려면 결국 while문을 사용해야 합니다. 저는 리스트의 인덱스 값이 될 i에 초기 값으로 0을 주고 출력할 때마다 i가 1씩 증가되도록 했습니다. 여기서 따로 조건을 추가해 주지 않으면 i가 최대 인덱스를 초과해 Indexerror가 발생합니다. 이 에러를 피하기 위해서는 i가 최대 인덱스를 넘었을 경우 가장 초기값인 0으로 돌아가도록 if문을 넣어주면 됩니다.