본문 바로가기
Algorithm/BOJ

[백준] 3649번 - 로봇 프로젝트 (파이썬)

by _temp 2022. 3. 26.

https://www.acmicpc.net/problem/3649

# 로봇 프로젝트

while True:
    try:
        x = int(input())*10000000
        n = int(input())
        arr = [int(input()) for _ in range(n)]
        arr.sort()
        answer = []
        left, right = 0, n-1
        while left < right:
            if arr[left]+arr[right] < x:
                left += 1
            elif arr[left]+arr[right] > x:
                right -= 1
            else:
                answer = [arr[left], arr[right]]
                break
        if answer:
            print('yes {0} {1}'.format(answer[0], answer[1]))
        else:
            print('danger')
    except:
        break

 

투포인터
1. while문 안에 try-except 구조를 넣는다.
    - 테스트 케이스가 존재 하지만 개수는 알려주지 않음
    - 무한반복으로 입력을 받다가 EOF일 경우 break 하도록
2. x, n, arr을 입력받고, arr 정렬
3. 투포인터
    - 합이 x보다 작으면 left 증가
    - 합이 x보다 크면 right 감소
    - 합이 x이면 answer에 넣고 break (문제에서 '답이 여러 개일 때 차가 가장 큰 값'이라고 명시)
4. answer가 있으면 'yes answer[0] answer[1]' 출력 없으면 'danger' 출력