[Python] BOJ 3649 - 로봇 프로젝트

728x90
반응형

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

 

3649번: 로봇 프로젝트

각 테스트 케이스마다 한 줄에 하나씩, 구멍을 완벽하게 막을 수 있는 두 조각이 없다면 'danger'를 출력한다. 막을 수 있는 경우에는 'yes ℓ1 ℓ2'를 출력한다. (ℓ1 ≤ ℓ2) 정답이 여러 개인 경우에

www.acmicpc.net

# 문제푸는 것보다 입출력받는게 더 까다로웠다..

   입력이 여러 테스트 케이스로 이루어져 있는데, 테스트케이스가 몇개인지 알려주지 않는다.

   따라서 '그대로 출력하기'문제처럼 try, except구문을 통해 EOF가 나올때까지 입력을 계속 받아야한다.

 

 

1. while True를 통해 EOF가 입력될때까지 계속 try문을 실행해준다.

   x를 입력받아서 1000만을 곱해준다. (1cm는 1000만 나노미터이기 때문)

   n을 입력받고, 각 레고조각의 길이를 lego에 넣고 정렬해준다.

   레고 길이는 -10억 ~ 10억이기 때문에 ans에 [-10억-1, -10억-1]을 넣어준다.

    (중간에 답이 될수 없는 아무 숫자나 넣어주면 된다.)

 

2. 이제 투포인터를 사용해 완벽하게 구멍을 막을 수 있는 두 레고를 찾아주면 된다.

    마지막까지 ans가 초기값과 같다면 두 레고조각을 찾지 못한 것이므로 "danger"출력

    찾았으면 "yes" + 두 레고 조각 길이를 출력해준다.

 

import sys
input = sys.stdin.readline

while True:
    try:
        x = int(input()) * 10000000
        n = int(input())
        lego = []
        for _ in range(n):
            lego.append(int(input()))
        lego.sort()
        ans = [-1000000001, -1000000001]

        i, j = 0, n-1
        while i < j:
            if lego[i] + lego[j] == x:
                ans = lego[i], lego[j]
                break
            elif lego[i] + lego[j] > x:
                j -= 1
            else:
                i += 1

        if ans == [-1000000001, -1000000001]:
            print("danger")
        else:
            print("yes", ans[0], ans[1])

    except:
        break

(solved.ac 티어: 골드 4)

728x90
반응형
TAGS.

Comments