본문 바로가기
알고리즘/소스코드

KOREATECH 1003: 0을 만들자 - Small

by cjw.git 2020. 12. 8.

Link : judge.koreatech.ac.kr/problem.php?id=1003


Python

더보기
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
from sys import stdin
 
data_length = int(stdin.readline().strip())
 
data_arr = [int(data) for data in stdin.readline().strip().split(' ')]
data_arr.sort()
 
counter = 0
save_result = dict()
for idx, target in enumerate(data_arr[0:-1]):
    target *= -1
    s = idx + 1
    e = len(data_arr) - 1
    while e - s >= 1:
        result = data_arr[s] + data_arr[e]
        if result == target:
            try:
                save_result[data_arr[s], data_arr[e], result * -1]
 
            except KeyError:
                counter += 1
                save_result[data_arr[s], data_arr[e], result * -1= 1
            finally:
                e-=1
        elif result > target:
            e-=1
        elif result < target:
            s+=1
 
        if data_arr[s] > target:
            break
print(counter)
cs

FeedBack

  1. 중복제거 하는 법을 잘 모름.
  2. set을 이용하여 중복제거 가능 할 듯.

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
class Type {
public:
    int a, b, c;
    Type(int a, int b, int c) {
        this->= a;
        this->= b;
        this->= c;
    }
};
 
class ResultList {
private:
    vector<Type> list;
public:
    void append(int a, int b, int c) {
        list.push_back(Type(a, b, c));
    }
 
    bool Check(int a,int b,int c) {
        if (list.size() == 0)
            return false;
 
        for (const auto& item : list) {
            if (item.a == a && item.b == b && item.c == c) {
                return true;
            }
        }
        return false;
    }
};
 
int main() {
    int quest_count;
    vector<int> v;
    ResultList save_result;
    cin >> quest_count;
    for (int i = 0; i < quest_count; i++) {
        int input;
        cin >> input;
        v.push_back(input);
    }
    sort(v.begin(), v.end());
 
    int counter = 0;
 
    for (int index = 0; index < v.size() - 1; index++) {
        int target = v[index] * -1;
        int s = index + 1;
        int e = v.size() - 1;
        while(e - s >= 1){
            int result = v[s] + v[e];
            if (result == target) {
                if (!save_result.Check(v[s], v[e], result * -1)) {
                    counter += 1;
                    save_result.append(v[s], v[e], result * -1);
                }
                e -= 1;
            }
            else if (result > target) {
                e -= 1;
            }
            else if (result < target) {
                s += 1;
            }
 
            if (v[s] > target) {
                break;
            }
        }
    }
    cout << counter;
    return 0;
}
cs

FeedBack

  1. 중복제거 하는 법을 잘 모름.

 


 

 

 

 

cjw.git@gmail.com

댓글