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. 진~~~~~~~~~~~~~~짜 입출력 조건 + 문제 조건 🌟 무조건. 재확인 🌟 하고 따로 적어둔 다음에 설계 시작해야겠다 ㅜㅠ
'Algorithm & SQL > BOJ' 카테고리의 다른 글
| [백준 16173번 / Java] BOJ 16173 : 점프왕 쩰리 (Small) (0) | 2024.03.24 |
|---|---|
| [백준 2309번 / Java] BOJ 2309 : 일곱 난쟁이 (0) | 2024.03.16 |
| [백준 2343번 / Java] BOJ 2343 : 기타 레슨(이분 탐색) (0) | 2024.03.10 |
| [백준 22862번 / Java] BOJ 22862 : 가장 긴 짝수 연속한 부분 수열 (large) (투포인터) (0) | 2024.03.09 |
| [백준 15831번 / Java] BOJ 15831 : 준표의 조약돌(투 포인터) (0) | 2024.03.08 |