ALGORITHM/BOJ
[백준] 3649 로봇 프로젝트
0298
2021. 2. 18. 14:10
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값을 올렸다.