- two pointer로 문제를 푸는 것이 익숙하지 않아서 itertools의 combination을 이용했다 -> 당연하게도 모든 경우를 확인하는 것이니 시간 초과가 발생
- 따라서 two pointer로 문제를 해결하려했다. sorted(list)에서 left, right를 지정하고 비교 대상과 크기를 비교해서 경우에 따라 left += 1, right -= 1로 값을 변화시키며 경우를 탐색하였다.
- testcase가 여러개 주어진다는 것은 확인했지만 실제 테케는 1개만 주어져있어서 처음엔 고려하지 못햇었다 (25%에서 오답처리) -> 여러가지 시도해보았으나 try,except 구문을 이용해서 해결했다.
import sys
input = sys.stdin.readline
# combination 활용 -> 시간초과
# two pointer 사용
while True:
try:
hole = (int(input()))*10**7
n = int(input())
pieces = sorted([int(input()) for _ in range(n)])
answers = {}
left, right = 0, n-1
while left < right:
if pieces[left] + pieces[right] < hole:
left += 1
elif pieces[left] + pieces[right] > hole:
right -= 1
else:
answers[pieces[right]-pieces[left]] = [pieces[left], pieces[right]]
break
if answers:
print('yes', answers[max(answers.keys())][0], answers[max(answers.keys())][1])
else:
print('danger')
except: # 입력 값이 없는 경우 예외처리하는 방법
break
try-except 구문에 대한 이해 -> except에 error의 종류를 기재해서 특정 에러일 때 어떤 행동을 할지 결정할 수 있다. 이번 문제의 경우에는 EOFError였지만 그 외의 error는 발생하지 않았기 때문에 굳이 조건으로 설정하지 않았다.
(ㅎr.....)