본문 바로가기

온라인 코딩/기타(Other)

[백준] 2480번 주사위 세개

 

 

문제

소스코드

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