알고리즘

[boj3649/Java]로봇 프로젝트

IT 참다랑어 2023. 7. 31. 12:27

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

 

3649번: 로봇 프로젝트

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

www.acmicpc.net

 

해당 문제에서 제일 당황스러웠던건...

테스트 케이스 수가 주어지지 않았던거...

문제를 똑바로 안읽어서 여러번 틀렸는데 좀 당황스러웠음...

 

문제 자체는 간단했다! 투 포인터를 이용하는 문제인데 먼저 블록을 길이 순서대로 정렬하는 것이 필요했다.

일단 정렬해..

그리고 정렬 후 최솟값을 left(l)로 최댓값을 right(r)로 설정하고

찾아야하는 길이가 l과 r의 길이의 합보다 길다면 l을 옮기고

짧다면 r을 옮겨 길이를 찾을 수 있도록 했다.

 

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

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String t = null;
		while((t = br.readLine()) != null) {
			int x = Integer.parseInt(t);
			x *= 10000000;
			int n = Integer.parseInt(br.readLine());
			int[] block = new int[n];
			for (int i = 0; i < n; i++) {
				block[i] = Integer.parseInt(br.readLine());
			}
			Arrays.sort(block);

			int l = 0, r = n - 1;
			boolean flag = false;

			while (l < r) {
				int sum = block[l] + block[r];
				if (sum == x) {
					System.out.printf("yes %d %d\n", block[l], block[r]);
					flag = true;
					break;
				} else if (sum > x) {
					r--;
				} else {
					l++;
				}
			}

			if (!flag) {
				System.out.println("danger");
			}
			t = null;
		}
	}

}

'알고리즘' 카테고리의 다른 글

[boj21758/Java] 꿀 따기  (0) 2023.07.31
[boj2531, 15961/Java] 회전 초밥  (0) 2023.07.31
[boj17144/Java] 미세먼지 안녕!  (0) 2023.07.26
[boj5397/Java] 키로거(Stack)  (0) 2023.07.24
[boj13335/Java] 트럭(Queue 사용법)  (0) 2023.07.24