#include <bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int roomNumber;
int sum = 0;
float max = 0;
cin >> roomNumber;
float num[10] = { 0, }; //1~9까지 담아줌
if (roomNumber == 0) { //반례 첫 번째 0이 입력되면 1개를 쓰는거임
cout << 1;
return 0;
}
while (roomNumber > 0) { //0보다 큰수가 입력이 될 때
if (roomNumber % 10 == 6 || roomNumber % 10 == 9) { //6과 9는 서로 바꿔 쓸 수 있으니까 6과 9가 나오면 0.5씩 더해줌 생각해보면 말 됨
num[9] += 0.5;
roomNumber /= 10;
}
else { //6 과 9 아닌 수는 그냥 1씩 더하기
num[roomNumber % 10]++;
roomNumber /= 10;
}
}
for (int i = 0; i < 10; i++) {
if (num[i] > max) { //배열에 있는 수들 중에서 가장 큰 수를 찾는다 12345666이면 가장 큰 수가 1.5이다.
max = num[i];
}
}
if (max == 0.5) { //반례로 6이나 9만 입력되면 max가 0.5가 된다.
cout << 1;
}
else { //그게 아닌 다른 수일 때
if ((int)(max * 10) % 10 == 0) { // 이렇게 해주는 이유는 소수인지 자연수인지
//판별 하기 위해서 소수면 10을 곱해서 10으로 나눈 나머지가 0이 아니다.
cout << max;
}
else {//max가 소수이면 예를들어 1.5면 결국 스티커를 2개 사야되니 밑에 식 처럼 해준다
cout << (int)max + 1;
}
}
return 0;
}
자세한 설명은 코드에 주석으로 썼습니다.
반례를 생각하기 어려워서 질문글에서 찾아봄
0,6,9 입력했을 때 1이 나와야 되고
1000000 입력했을 때 6이 나와야 된다.
나는 6과 9의 개수를 0.5로 생각해서 풀었다.
틀렸습니다가 2번 나와버렸다
'BOJ' 카테고리의 다른 글
[백준] 1919번 애너그램 만들기 c++ (0) | 2020.04.21 |
---|---|
[백준] 11328번 Strfry C++ (0) | 2020.04.21 |
[백준] 13300 방 배정 c++ (0) | 2020.04.20 |
[백준] 10807번 개수 세기 c++ (0) | 2020.04.20 |
[백준] 10808번 알파벳 개수 C++ (0) | 2020.04.20 |