문제: https://www.acmicpc.net/problem/1475
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int digit[10] = {};
int max = 0;
string str;
cin >> str;
for (char c : str)
digit[c - '0']++;
for (int i = 0; i < 9; i++)
{
if (i == 6)
continue;
(max < digit[i]) && (max = digit[i]);
}
double sixnine = ceil((double)(digit[6] + digit[9]) / 2);
(max < sixnine) && (max = sixnine);
cout << max;
}
각 자리의 0부터 9를 카운트하기 위한 배열 digit을 선언했다.
str에 방 번호를 입력받고, 각 문자를 하나씩 가져와서 c - '0'으로 digit을 계산하고 배열의 인덱스로 접근해서 1을 증가시켰다.
방 번호를 완성시키기 위한 세트의 최소 개수는 가장 많이 존재하는 digit을 기준으로 잡으면된다.
그런데 6과 9는 서로 대체해서 사용가능하기 때문에 6과 9를 사용하기 위해 필요한 세트의 최소 개수는 6과 9의 개수를 더한 값이 2를 나눈 것과 같다.
따라서 6과 9를 제외한 digit배열의 최댓값과 6과 9를 사용하는데 필요한 세트의 개수를 비교해서 더 큰 값을 출력해주면 된다.
'알고리즘' 카테고리의 다른 글
[BOJ] 10808: 알파벳 개수 (0) | 2022.09.23 |
---|---|
[BOJ] 3273: 두 수의 합 (0) | 2022.09.22 |
[BOJ] 2577: 숫자의 개수 (0) | 2022.09.22 |
[BOJ] 2562: 최댓값 (1) | 2022.09.21 |
[BOJ] 2309: 일곱 난쟁이 (1) | 2022.09.21 |