프로그래밍 공방

[백준] 3694번 : 로봇 프로젝트 본문

개발/문제해결

[백준] 3694번 : 로봇 프로젝트

hyosupsong 2021. 2. 16. 22:04

문제

www.acmicpc.net/problem/3649

 

3649번: 로봇 프로젝트

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

www.acmicpc.net

문제해결방법

레고 조각 배열을 정렬하고 양 끝에서부터 구멍을 막을 수 있는 조각이 있는지 조사한다.

양 끝 조각의 합이 구멍보다 큰 경우 조각이 큰 쪽을 하나 감소, 작은 경우 조각이 작은 쪽을 하나 증가.

만약 구멍을 막을 수 있는 조각을 찾았다면 이후의 조각들은 구멍을 막을 수 있는 조각이 있더라고 차이의 절댓값이 더 작으므로 더 탐색하지 않아도 된다.

* 입력을 계속 받아야 하는 부분을 while이 아니라 if로 해서 한참을 못찾았다. 정신 차리자.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package baekjoon;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
 
public class Main3694_로봇프로젝트 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while((str = br.readLine())!=null) {
            int X = Integer.parseInt(str)*10000000;
            int N = Integer.parseInt(br.readLine());
            int[] legos = new int[N];
            for(int i=0; i<legos.length; i++) legos[i] = Integer.parseInt(br.readLine());
            Arrays.sort(legos);
            int s = 0, e = N-1;
            boolean flag = false;
            while(s<e) {
                int sum = legos[s]+legos[e];
                if(sum==X) {
                    flag = true;
                    break;
                }
                else if(sum<X) s++;
                else e--;
            }
            if(flag) System.out.println("yes "+legos[s]+" "+legos[e]);
            else System.out.println("danger");
        }
    }
}
cs

코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.

'개발 > 문제해결' 카테고리의 다른 글

[백준] 19236번 : 청소년 상어  (0) 2021.02.19
[프로그래머스] 자동완성  (0) 2021.02.18
[백준] 1062번 : 가르침  (0) 2021.02.15
[프로그래머스] n진수 게임  (0) 2021.02.12
[백준] 1561번 : 놀이 공원  (0) 2021.02.10