문제 풀이/백준

[백준] 3649번. 로봇 프로젝트(JAVA)

27200 2025. 6. 16. 20:14

문제

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


풀이(17분)

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String input = null;
        StringBuilder  sb = new StringBuilder();
        while((input = br.readLine()) != null){
            int size = Integer.parseInt(input) * 10_000_000; // cm -> nano
            int n = Integer.parseInt(br.readLine());
            int[] arr = new int[n];
            for(int i = 0; i < n; i++){
                arr[i] = Integer.parseInt(br.readLine());
            }
            Arrays.sort(arr);
            int start = 0;
            int end = n-1;
            boolean flag = false;
            while(start < end){
                int total = arr[start] + arr[end];
                if(total == size){
                    sb.append("yes ").append(arr[start]).append(" ").append(arr[end]).append("\n");
                    flag = true;
                    break;
                }
                if(total < size){
                    start++;
                    continue;
                }
                end--;
            }
            if(!flag){
                sb.append("danger").append("\n");
            }

        }

        System.out.print(sb);
    }

}

문제 풀이 전략

 

문제 자체는 단순한 투포인터로 비교를 통해 정답을 도출하면 되는 문제였다.

 

근데 왜 골5 문제일까?

아마도 EOF 입력을 처리하는 것이 중요하다고 생각한다.

while((input = br.readLine()) != null){

 

다음과 같이 입력을 처리함으로써 입력이 끝나는 것을 처리해주어야 한다.