본문 바로가기

알고리즘/백준

1475번 방 번호

반응형





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
#include <iostream>
 
using namespace std;
 
int numbers[10= {
    0,
};
 
int main()
{
    int n;
 
    scanf("%d"&n);
 
    if (n == 0)
    {
        cout << << '\n';
        return 0;
    }
 
    while (n >= 1)
    {
        numbers[n % 10]++;
        n /= 10;
    }
 
    int max = 0;
    int maxIdx;
 
    for (int i = 0; i < 9; i++)
    {
        if (i == 6)
            continue;
        if (max < numbers[i])
        {
            max = numbers[i];
            maxIdx = i;
        }
    }
 
    int last = ((numbers[9+ numbers[6]) % == 1) ? (numbers[9+ numbers[6]) / + : (numbers[9+ numbers[6]) / 2;
    if (last >= max)
        max = last;
    cout << max << '\n';
    return 0;
}
cs



0부터 9까지 있는 숫자 모양 세트를 사는데 몇 세트를 최소로 살 수 있냐는 문제이다.

여기서 주의할 점은 6과 9는 서로를 대신할 수 있다는 점이다. 


먼저 시작점으로 numbers라는 원소를 10개 가지고 있는 배열을 하나 선언한다. 그리고나서 받아온 숫자 중 속하는 숫자가 있다면 그 숫자의 인덱스에 맞게 numbers를 증가시켜준다.


마지막으로 어떤 숫자가 가장 크냐를 따지는데 가장 큰 숫자를 따지는 과정에서 6과 9는 제외한다. 그 이유는 위에 주의해야할 점으로 6과 9는 서로를 대신할 수 있기 때문이다.


max를 구하고 난 이후 마지막으로 숫자9와 6의 개수를 따져서 max와 비교해서 어느 수가 큰지를 비교해준다.


last를 구하는 식은 6과 9를 더했을 때 홀수가 된다면 한 세트가 더 필요한 것이므로 2로 나눈 값에 1을 더해준 것이다.

예를 들어 69699라는 숫자가 오면 3세트가 필요하므로 5 / 2 의 값에 + 1을 해준 것이다.

'알고리즘 > 백준' 카테고리의 다른 글

2750번 수 정렬하기  (0) 2018.10.11
6064번 카잉 달력  (0) 2018.10.11
2775번 부녀회장이 될테야  (0) 2018.10.10
10250번 ACM 호텔  (0) 2018.10.10
1193번 분수찾기  (0) 2018.10.10