Python

파트7. flag OR else

누구용 2022. 7. 22. 10:50

본 문제에서는 자연수 5개가 주어집니다.

  1. 숫자를 차례로 곱해 나온 수가 제곱수1가 되면 found를 출력하고
  2. 모든 수를 곱해도 제곱수가 나오지 않았다면 not found를 출력하는

코드를 작성해주세요.

예시 1

입력

2
4
2
5
1

출력

found

설명

수를 곱해나가면 2, 8, 16, 80, 80 이 나옵니다. 16은 4를 제곱해 나온 수이므로 이 수는 제곱수입니다. 따라서 found를 출력합니다.

예시 2

입력

5
1
2
3
1

출력

not found

설명

수를 곱해나가면 5, 5, 10, 30, 30 이 나옵니다. 이중 어떤 수도 제곱 수가 아니므로 not found를 출력합니다.

 

제출한 정답

import math

answer = 'not found'
val = 1
for i in range(5):
    num = int(input())
    val *= num
    
    if (math.sqrt(val) % 1) != 0:
        continue
        
    answer = 'found'
    break

print(answer)

예측 오답

import math

numbers = [int(input()) for _ in range(5)]
multiplied = 1
flag = True
for number in numbers:
    multiplied *= number
    if math.sqrt(multiplied) == int(math.sqrt(multiplied)):
        flag = False
        print('found')
        break

if flag:
    print('not found')

풀이 정답

import math

numbers = [int(input()) for _ in range(5)]
multiplied = 1
for number in numbers:
    multiplied *= number
    if math.sqrt(multiplied) == int(math.sqrt(multiplied)):
        print('found')
        break
else:
    print('not found')

 

for - else 문법이 있는지 처음 알게 되었다.
for문이 break가 호출되지 않았을 경우 else가 호출된다.
해당 방법을 사용하면 상위에 변수 flag를 만들어서 if-else하는 문장을 줄일 수 있어 아주 유용해 보인다.

프로그래머스 - 파이썬을 파이썬 답게 강좌 파트7의 관련 항목들이 더 있지만 예제 문제가 해당 문제까지 있으므로 블로그 문제풀이 포스팅은 여기서 마치겠습니다.