본 문제에서는 자연수 5개가 주어집니다.
- 숫자를 차례로 곱해 나온 수가 제곱수1가 되면 found를 출력하고
- 모든 수를 곱해도 제곱수가 나오지 않았다면 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의 관련 항목들이 더 있지만 예제 문제가 해당 문제까지 있으므로 블로그 문제풀이 포스팅은 여기서 마치겠습니다.
'Python' 카테고리의 다른 글
백준. 동전1 (Dynamic Programming) (0) | 2022.08.18 |
---|---|
백준. 설탕배달 (Dynamic Programming) (0) | 2022.08.18 |
파트7. for 문과 if문을 한번에 (0) | 2022.07.22 |
파트6. 가장 많이 등장하는 알파벳 찾기 (0) | 2022.07.22 |
파트6. 순열과 조합 (0) | 2022.07.21 |