Red Glitter Pointer

 

 

 

3649번: 로봇 프로젝트

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

www.acmicpc.net

 

 

 

👇 작성한 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public String solution(int x, int n, int[] arr) {
        String answer = "danger";
        Arrays.sort(arr); // 투포인터 알고리즘을 사용하기 위해 정렬
        int lt = 0; // 왼쪽 포인터
        int rt = n - 1; // 오른쪽 포인터

        while(lt < rt) { // 왼쪽 포인터가 오른쪽 포인터보다 작을 때만 작동
            int sum = arr[lt] + arr[rt];

            // 더한 값이 찾으려는 x의 값과 일치하다면 yes 리턴,
            // 더한 값이 x보다 크다면 오른쪽 포인터(더 큰 수) 감소, x보다 작다면 왼쪽 포인터 증가(수 증가시키기)
            if(sum == x) return "yes " + arr[lt] + " " + arr[rt];
            else if(sum > x) rt--;
            else lt++;
        }

        return answer;
    }

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

        while ((str = br.readLine()) != null) { // 테스트 케이스의 수를 따로 주지 않음
            int x = Integer.parseInt(str);
            int n = Integer.parseInt(br.readLine());

            int[] arr = new int[n];
            for (int i = 0; i < n; i++) arr[i] = Integer.parseInt(br.readLine());

            Main T = new Main();
            System.out.println(T.solution(x * 10000000, n, arr)); // 나노미터
        }
    }
}

 

 

느낀 점 및 정리 ✍️

1. 최근 풀었던 문제 중에 제일 !!!! 허탈했다 ㅜ 문제 읽자마자 [두 개의 숫자 + 정답이 여러 개일 경우 차이가 더 큰 값] 조건을 보고 투포인터 쓰면 바로 풀리겠다 싶어서 빠르게 로직 구현했는데, 25%에서 틀렸다는 문구가 계속 나와서 테스트 케이스 여러 개 만들어서 해보는데도 틀린 부분이 보이지 않았다 ㅠ 그러다가 발견한 "입력은 여러개의 테스트 케이스로 이루어져 있다" ...............ㅋㅎㅋㅎ ㅋ후쿠 ㅜㅜㅠㅠ 나는 왜 당연하게 1개의 테스트 케이스만 입력될 수 있게 구현했는가,,,,, ㅠ 풀이 시간은 5분? 밖에 안걸렸는데 이것 때문에 디버깅 시간이 ☠️☠️☠️☠️

2. 진~~~~~~~~~~~~~~짜 입출력 조건 + 문제 조건 🌟 무조건. 재확인 🌟 하고 따로 적어둔 다음에 설계 시작해야겠다 ㅜㅠ 

 

 

+ Recent posts

loading