반응형
리뷰
D3 첫 도전, D3는 적당히 풀 수 있을 것 같아 가장 정답률이 낮은 문제를 택했다. 정답률 13%로 어떤 문제길래 이렇지? 하고 풀어보니 시간초과 파티였다. 딕셔너리를 통해 문제를 풀어 겨우 통과하였다.
문제 풀이
- 각 케이스 마다 빈 딕셔너리를 하나 초기화 해준다.
- 현재 수를 소인수 분해 해주고 각 소인수의 지수를 딕셔너리의 value 값으로 추가 해준다.
- 마지막 인자가 소수일 경우 이 또한 딕셔너리에 추가해 준다.
- 거듭 제곱수를 구하는 문제지만 결국 제곱수가 b의 최소값이므로 딕셔너리의 value값이 홀수일 경우 key값을 b에 곱해준다. (소인수한 모든 지수를 짝수로 맞춰주면 해당 값이 거듭제곱 값이 되는 최소값이다.)
- 각 케이스의 정답을 result 리스트에 추가해 주고 마지막에 result 리스트의 인자를 모두 출력해 준다.
참고 사항
각 케이스마다 print를 해줄 경우 시간이 많이 잡아먹는다고 한다. 정답을 저장해 두었다가 한번에 출력하도록 하자.
정답 코드
def q10965():
# SWEA 10965번 D3 제곱수 만들기 파이썬
t = int(input())
result = []
for i in range(1, t + 1):
a = int(input())
dic = {}
k = 2
while k ** 2 <= a:
while a % k == 0:
if k in dic:
dic[k] += 1
else:
dic[k] = 1
a //= k
k += 1
if a > 1:
dic[a] = 1
b = 1
for key, val in dic.items():
if val % 2:
b *= key
result.append(f'#{i} {b}')
for i in result:
print(i)
q10965()
728x90
반응형
'알고리즘 공부 > 파이썬(Python)' 카테고리의 다른 글
SWEA 1208번 D3 [S/W 문제해결 기본] 1일차 - Flatten 파이썬 (0) | 2024.06.30 |
---|---|
SWEA 1206번 D3 [S/W 문제해결 기본] 1일차 - View 파이썬 (0) | 2024.06.30 |
백준 3085번 사탕 게임 파이썬 (0) | 2024.06.30 |
백준 1063번 킹 파이썬 (0) | 2024.06.29 |
백준 2527번 직사각형 파이썬 (0) | 2024.06.28 |