코딩 공부/백준

[백준][C++] 2467 용액

김 정 환 2021. 2. 27. 09:53
반응형

www.acmicpc.net/problem/2467

 

2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net

 

 

 

알고리즘 종류

    - 투포인터

 

 

 

사고 과정

    - 정렬된 상태로 입력된 용액의 양쪽 끝에 포인터를 두고 비교한다.

        1. 양쪽 끝의 합이 0보다 작으면, 왼쪽 포인터를 +1해준다.

        2. 양쪽 끝의 합이 0보다 크면, 오른쪽 포인터를 -1해준다.

        3. 두 용액의 합의 절대값을 이전에 저장한 answer이라는 변수보다 작으면 answer을 갱신한다.

 

 

 

구현(C++)

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
50
51
52
53
54
#include <iostream>
#include <vector>
#include <cmath>
 
using namespace std;
 
int n;
vector<long long> liquids;
 
void solution(){
    
    int left=0, right=n-1;
    long long answer = 9987654321;
    int A, B;
    
    while(left < right){
        
        if(liquids[left] + liquids[right] == 0){
            cout << liquids[left] << " " << liquids[right];
            return;
        }
        
        if(abs(liquids[left] + liquids[right]) < answer){
            answer = abs(liquids[left] + liquids[right]);
            A = liquids[left];
            B = liquids[right];
        }
        
        if(liquids[left] + liquids[right] < 0)left++;
        else if(liquids[left] + liquids[right] > 0)    right--;
        
    }
    
    cout << A << " " << B;
}
 
 
int main(void){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin >> n;
    
    int liq;
    for(int i=0; i<n; i++){
        cin >> liq;
        liquids.push_back(liq);
    }
    
    solution();
}
 
 
cs

 

 

 

시행착오

 

반응형

'코딩 공부 > 백준' 카테고리의 다른 글

[백준][C++] 전기가 부족해  (0) 2021.02.28
[백준][C++] 2352 반도체 설계  (0) 2021.02.27
[백준][C++] 14719 빗물  (0) 2021.02.26
[백준][C++] 1956 운동  (0) 2021.02.25
[백준][C++] 4485 녹색 옷 입은 애가 젤다지?  (0) 2021.02.25