ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 3649 로봇 프로젝트
    ALGORITHM/BOJ 2021. 2. 18. 14:10

    www.acmicpc.net/problem/3649

     

    3649번: 로봇 프로젝트

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

    www.acmicpc.net

    2021-02-18


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.StringTokenizer;
     
    public class Main3649 {
        public static int N;
        public static long X, arr[];
        public static void main(String[] args) throws Exception {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            String temp;
            while((temp = bf.readLine())!= null) {
                StringTokenizer st = new StringTokenizer(temp.trim());
                X = Long.parseLong(st.nextToken())*10000000// cm -> nano meter
                st = new StringTokenizer(bf.readLine().trim());
                N = Integer.parseInt(st.nextToken());
                arr = new long[N];
                for(int i = 0; i < N; i++) {
                    st = new StringTokenizer(bf.readLine().trim());
                    arr[i] = Long.parseLong(st.nextToken());
                }
     
                Arrays.sort(arr);
                boolean flag = false;
                if(N > 1) {
                    int start = 0;
                    int end = arr.length-1;
                    while(start < end) {
                        if(X == arr[start] + arr[end]) {
                            System.out.println("yes " + arr[start] + " " + arr[end]);
                            flag = true;
                            break;
                        }
                        else if(arr[start] + arr[end] > X) end--;
                        else start++;
                    }
                }
                if(!flag) System.out.println("danger");
            }
        }
    }
    cs

     

    #문제풀이

    1. 구하려는 블록의 길이 X는 나노미터로 환산을 해놓는다.

     

    2. 레고조각들은 오름차순으로 정렬을 한다.

     

    3. start는 첫 번째 인덱스 end값은 마지막 인덱스로 지정을 한 후, 현재 인덱스들의 값이 우리가 구하고자 하는 X의 경우 그대로 출력을 한 후 while문을 나왔다. 가장 끝과 끝에서부터 시작하기 때문에 무조건 |l1- l2|가 가장 클 것이다.

     

    4. 만약 더한 값이 우리가 찾고자 하는 값이 아니라면, 값이 오버된 경우 end값을 땡기고, 값이 너무 적은 경우 start값을 올렸다.

    'ALGORITHM > BOJ' 카테고리의 다른 글

    [백준] 2623 음악프로그램  (0) 2021.02.23
    [백준] 2110 공유기 설치  (0) 2021.02.23
    [백준] 1062 가르침  (0) 2021.02.15
    [백준] 1561 놀이공원  (0) 2021.02.13
    [백준] 5676 음주 코딩  (0) 2021.02.07

    댓글

Programming Diary