반응형
https://www.acmicpc.net/problem/1402
혼자 힘으로 풀었는가? O?X?
알고리즘 분류
- 수학
- 애드 혹
- 해 구성하기
문제
어떤 정수 A가 있으면 그 수를 A = a1 * a2 * a3 * a4 ... * an으로 했을 때 A' = a1 + a2 + a3 ... + an이 성립하면 "A는 A'으로 변할 수 있다"라고 한다. (ai는 정수) 만약 A'이 A"으로 변할 수 있으면 "A는 A"으로 변할 수 있다"라고 한다.
이때 A와 B가 주어지면 A는 B로 변할 수 있는지 판별하시오.
입력
첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 100)이 주어진다. 테스트 케이스마다 두 정수 A, B(-231 ≤ A, B ≤ 231-1)가 주어진다.
출력
각각의 테스트 케이스마다 한 줄에 변할 수 있으면 yes, 아니면 no를 출력한다.
풀고 나니 쓰레기 같은 문제였다.
처음엔 소인수분해를 한 다음 각 수마다 찾아줘야 하는 줄 알았다.
물론 난 첫 케이스에 소인수분해를 하진 않았지만 말이다.
예시에 나온
6 5
6 = 2 * 3
5 = 2 + 3
6 6
6 = 1 * 2 * 3
6 = 1 + 2 + 3
위와 같이 표기할 수 있기 때문에
import sys
import math
input = sys.stdin.readline
t = int(input())
for _ in range(t):
a, b = map(int, input().split())
for i in range(1, a//2):
if a % i == 0:
k = a // i
if i + k == b or i+k+1 == b:
print("yes")
break
else:
print("no")
처음엔 위와 같이 풀었다.
혹시 풀리나..? 싶었으나 시간초과가 발생하였고
여러 시도를 해봤으나 해결되지 않아
백준의 질문게시판을 본 결과
a1 a2 ... an이
중복되지 않은 값을 가지지 않을 수도 있겠구나 생각되었다.
예를 들어
1 100
1 = 1 * 1
100 = 1 + 1 + 1+ 1+ 1+ 1+...+ 1
yes
이런 식으로 표기가 가능하다는 것이었다...
import sys
import math
input = sys.stdin.readline
t = int(input())
for _ in range(t):
a, b = map(int, input().split())
print("yes")
'''
for i in range(1, a//2):
if a % i == 0:
k = a // i
if i + k == b or i+k+1 == b:
print("yes")
break
else:
print("no")
'''
사실상 그냥
두 수를 입력받고
전부 다 yes 출력해 주면 끝인 문제였다.
반응형
'Algorithm > 백준' 카테고리의 다른 글
[Python] 백준 1439번 - 뒤집기 (1) | 2023.06.04 |
---|---|
[Python] 백준 1417번 - 국회의원 선거 (0) | 2023.06.02 |
[Python] 백준 1343번 - 폴리오미노 (0) | 2023.05.31 |
[Python] 백준 1331번 - 나이트 투어 (0) | 2023.05.30 |
[Python] 백준 1316번 - 그룹 단어 체커 (0) | 2023.05.29 |
댓글