문제
소스코드
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
|
#include<iostream>
#include<set>
#include<array>
#include<algorithm>
int ThreeSameNumbers(int number) {
return 10000 + number * 1000;
}
int TwoSameNumbers(int number) {
return 1000 + number * 100;
}
int OtherNumbers(int number) {
return number * 100;
}
int main() {
std::set<int> set;
std::array<int,3> dices;
int result{};
for (int i = 0; i < 3; ++i) {
int value;
std::cin >> value;
dices[i] = value;
set.insert(value);
}
std::sort(dices.begin(),dices.end(),std::less<int>());
// 3개가 같은 숫자
if (set.size() == 1) {
result = ThreeSameNumbers(dices[0]);
}
// 2개가 같은 숫자
else if (set.size() == 2) {
result = TwoSameNumbers(dices[1]);
}
//1개가 같은 숫자
else {
result = OtherNumbers(dices[2]);
}
std::cout << result << "\n";
}
|
후기
이 문제를 해결하기 위한 키워드는 2가지이다.
1. 입력받은 눈금 3개를 정렬을 한다.
sort 메서드를 사용해서 입력받은 숫자를 정렬한다. 그 이유는 2개가 같은 숫자가 있다고 할 때
1, 2, 1의 경우나 2, 1, 1 의 경우가 있다고 할 때 정렬을 하면 1, 1, 2로 2번째 숫자가 무조건 같은 숫자 이기 때문에
따로 예외처리가 필요 없기 때문이다.
2. 중복 개수를 판단한다.
set 컨테이너를 사용해서 컨테이너의 크기를 통해 같은 숫자가 몇 개가 있는지 판단하였다.
set은 중복된 숫자를 넣을 수 없기 때문에 예를 들어 1, 2, 1을 넣었을 때 set의 size는 2가 되기 때문에 같은 숫자가 2개가
있다고 판단할 수 있다 같은 예로 1, 3, 5의 숫자가 있다면 중복된 숫자가 없기 때문에 set의 size는 3이 되기 때문에
OtherNumbers()을 통해 값이 나오게 되며 여기서 가장 큰 숫자는 오름차순 정렬을 했기 때문에 dices [2]가 큰 수가 된다
출처 및 레퍼런스
문제 링크: https://www.acmicpc.net/problem/2480
'온라인 코딩 > 기타(Other)' 카테고리의 다른 글
[프로그래머스] SQL SELECT(1) (0) | 2021.02.20 |
---|---|
[백준] 2884번 알람 시계 (0) | 2020.06.04 |
[백준] 9655번 돌 게임 (0) | 2020.04.25 |
[백준] 16165번 걸그룹 마스터 준석이 (0) | 2020.03.22 |
[백준] 17224번 APC는 왜 서브태스크 대회가 되었을까? (0) | 2020.03.19 |