반응형

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

 

3649번: 로봇 프로젝트

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

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. arr 배열에 수들을 입력받고, 오름차순으로 정렬합니다.

 

2. while문을 통해 l < r 일 때 arr[ l ] + arr[ r ] 의 값이 x와 같다면 출력하고, x보다 작다면 l++, x보다 크다면 r--를 통해 x와 같을 때까지 반복해 줍니다.

 

3. x와 같은 경우가 없다면 danger를 출력합니다.

 

[ 소스코드 ]

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
42
43
44
45
46
47
48
49
#include<iostream>
#include<algorithm>
 
using namespace std;
 
int x, n;
int arr[1000000];
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    while (cin >> x) {
        x *= 10000000;
        cin >> n;
 
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
 
        sort(arr, arr + n);
 
        int l = 0;
        int r = n - 1;
        bool flag = false;
 
        while (l < r) {
            if (arr[l] + arr[r] == x) {
                cout << "yes " << arr[l] << ' ' << arr[r];
                flag = true;
                break;
            }
            else if (arr[l] + arr[r] < x) {
                l++;
            }
            else if (arr[l] + arr[r] > x) {
                r--;
            }
        }
 
        if (flag == false) {
            cout << "danger";
        }
 
        cout << '\n';
    }
}
cs
반응형

+ Recent posts