BeakJoon/Python
[Python] 백준 #1402번 : 아무래도이문제는A번난이도인것같다
쿼딩~
2023. 10. 24. 01:33
걸림돌
- 문제에서 제시하는 A,B의 관계를 검출 해내는 코드를 짜는데 어려움을 겪음
- A의 약수를 구하는 코드를 만들고 각 약수를 더해서 B가 나오게 만드는 코드를 처음에 만듬 but 정답은 그게 아니었음 아래서 설명
- 코드를 다 짜고 제출하는데 채점 결과에 시간 초과가 뜸
- input()을 sys.stdin.readline()으로 바꿔서 제출 했는데도 또 시간 초과가 떠서 이런 경우는 처음이라 당화하였으나 답 자체가 틀린거였음
코드
import sys
N = int(sys.stdin.readline())
# N 번 반복하는 for문
for _ in range (N):
num, num2= map(int,sys.stdin.readline().split())
list = []
# 1 부터 num+1 까지 i에 대입하면서 반복하는 for문
for i in range (1, num+1):
# num을 1부터 num+1 까지로 나눈 나머지가 0이라면 약수이기 때문에 list에 저장
if num % i == 0:
list.append(i)
# 약수로 만들지 못하는 수면 'no'를 출력해야하기 때문에 result 값을 'no'로 저장
result = 'no'
# 약수의 수 보다 1 작은 수 만큼 반복하는 for문
for i in range (len(list)-1):
# list의 각 인덱스를 0부터 1씩 증가시켜서 더하고
# num2 값과 같으면 'yes'를 result 값에 저장하고 반복문 탈출
if list[i]+list[i+1] == num2:
result = 'yes'
break
print (result)
이 코드는 처음에 실패한 코드에서 input()을 sys.stdin.readline()으로 바꾼 코드이다.
이렇게 했는데도 시간 초과가 떴다.
올바른 코드
for _ in range(int(input())):
A, B = map(int, input().split())
print("yes")
이 문제는 단순한 수학 문제였다.
A = 1*1*...1*A 또는 A = -1*-1*...-1*A 같은 식으로도 조건을 만족하기 때문에 A'는 어떤 A''든 만들 수 있다.
즉 A가 -1이거나 1이면 안된다는 조건이 없었기 때문에 A는 어떤 A든 만들 수 있는 것.
위의 코드로 해결했다.
알게된 것
- 알고리즘 문제 중 코드 짜는 것이 중요한 것이 아닌 이렇게 수학적 사고가 필요한 문제도 존재한다는 것
- 다음부턴 문제의 조건도 잘 생각해야겠다는 것