#include<iostream>
using namespace std;
string a;
int n, s;
int arr[10];
int main() {
cin >> a;
for (int i = 0; i < a.size(); i++) {
arr[a[i] - '0'] += 1;
}
for (int i = 0; i < 10; i++) {
if (n < arr[i]) {
n = arr[i];
if (i == 6 || i ==9) {
if((arr[6] + arr[9]) % 2 == 0)
n = (arr[6] + arr[9]) / 2;
else
n = (arr[6] + arr[9]) / 2 + 1;
}
}
}
cout << n;
}
충격적이게도 이거 푸는 데만 5시간 가량을 쏟은 것 같다. 물론 근로를 하느라 계속 집중하지는 못했지만 그래도 너무 오래걸렸다.
오늘은 전 날 했던 알파벳 개수 구한 것을 이용해 숫자를 하나 하나 치지 않았다. 하지만 세트의 개수를 구하는게 나에겐 너무 어려웠다. 123456789가 나왔을 때 이것을 어떻게 세트 한 개로 쳐야할지 감이 잘 오지 않았다. 가장 많이 나온 값이 세트의 개수가 아니냐는 말을 듣고 바로 풀어보았다.(어떻게 이런 생각을 할 수 있는지 부러웠다.) 그리고 6이랑 9는 같은 것으로 생각해도 되지 않나요? 하는 말을 듣고 그렇게 해보았다.
string a;
int n, s;
int arr[9];
int main() {
cin >> a;
for (int i = 0; i < a.size(); i++) {
if(a[i] == 9){
arr[6] += 1;
}
arr[a[i] - '0'] += 1;
}
이런 식으로 해서 풀었는데 9를 전혀 배열에 넣지못했다. 이유를 아직 찾지 못했다. 이유가 뭘까??
고찰
항상 나는 긴 문장을 받거나 숫자를 받고 나중에 하나 하나 쪼개서 저장해야하면 배열을 먼저 생각하게 된다. 하지만 string으로 받는 편이 나누기 편한 것 같다. (나중에 아닌 것이 나올지도 모르지만 현재는 그렇다.)
나는 아스키 코드로 풀었지만 받은 string을 10으로 나눠 그 나머지를 배열에 저장해서 풀 수도 있을 것이다.
6과 9를 어떻게 처리해야 하는지, 6과 9가 아닌 한 번씩 나온 숫자들을 어떻게 set하나로 처리할 지를 너무 오래 고민했다. 6과 9는 같은 숫자로, 모든 숫자들 중 가장 많이 나온 숫자가 set의 개수라는걸 영영 못 깨달았을 것 같다. 2시간 이상 고민하지 말아야겠다.
66666을 쳤는데 2가 나왔다. 나머지가 생기는 경우를 고려하지 않아서 그렇다. 이 부분은 나머지가 생기는 것과 생기지 않는 것으로 구분하여 해결하였다.