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
- 중복제거 하는 법을 잘 모름.
- 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 = a;
this->b = b;
this->c = 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
- 중복제거 하는 법을 잘 모름.
cjw.git@gmail.com
'알고리즘 > 소스코드' 카테고리의 다른 글
KOREATECH 1011: 징검다리 (0) | 2020.12.09 |
---|---|
KOREATECH 1010: 접두 소수 (0) | 2020.12.09 |
KOREATECH 1007: 유일한 수 (0) | 2020.12.08 |
KOREATECH 1004: 뒤집어 더하기 (0) | 2020.12.08 |
KOREATECH 1107: 실습시험 연습문제 - 모음 문자 수 (0) | 2020.12.08 |
댓글