/* 방 번호 9999 를 받아서 어떻게 처리해야하지? 1,2,3,4,5,6,7,8,9 원래 자리수가 몇개인지 파악을 해야합니다. 예를들어서 9999 를받으면 0 0 0 0 0 0 0 0 4 입니다만, 9를 돌려서 6으로 사용할 수 있기 때문에 2셋트만 필요로 합니다. 그럼 받은 것을 오케이 10으로 나눠서 무엇이 들어있는지 살펴보도록 합니다. 방은 엔이므로, 그럼 예를들어서 자릿수는 중요하지 않으니, 10으로 나눈 것을 살펴보도록 하겠습니다. 1234 % 10 = 4 1234 / 10 = 123 123 % 10 = 3 123 / 10 = 12 12 % 10 = 2 12 / 10 = 1 1 % 10 = 1 1 / 10 = 0 여기서 조건을 넣어서 0 이상일때만 돌리도록 합니다. 오케이. if(n>0){} 9와6을 제외한 값들에서 맥스값을 구하고 9 와 6은 따로 구해서 맥스값을 구하면 됩니다. 9 와 6 의 값은 더해서 2 -> 1 이고, 3 -> 더한 값이 0 1 2 3 4 5 6 이라면 0 1 1 2 2 3 3 이니 규칙이 2로 나눠서 2로 나눈값에 나머지가 있으면 +1 을 하면 됩니다. 나머지가 없으면 그대로 사용. 몫과 나머지를 모두 사용하도록 합니다. 오케이요. 일찍 오니까 일이 잘 되는 것 같습니다. */ #include <iostream> using namespace std; int N; int number[10] = { 0 }; int index = 0; int ans = 0; int N_copy = 0; void problemIn() { cin >> N; N_copy = N; while (N > 0) { index = N % 10; number[index]++; N = N / 10; } } void solve() {
int maxVal = 0; int max_sn = 0; int sum_sn = 0; for (int i = 0; i < 10; i++) { if (!(i==6) && !(i==9)) { if (maxVal < number[i]) { maxVal = number[i]; } } } sum_sn = number[6] + number[9]; max_sn = sum_sn / 2 + (sum_sn % 2 > 0 ? 1 : 0); if (maxVal < max_sn) { maxVal = max_sn; } if (N_copy == 0) { cout << 1 << endl; } else { cout << maxVal << endl; } } int main() { problemIn(); solve(); return 0; } |
숫자에 대해서 개별적으로 접근하는 방법은 10으로 나누고 나머지를 이용하는 것입니다. 오케이요. 문자에 대해서 접근하는 방법은 string 을 사용하는 것입니다. 오케이요. 예외처리하는 것에 대해서도 생각을 하고 있어야 하며, 생각이 났을 때 어디한곳에 기록해두면 좋습니다. 주석처리를 하면 안볼 가능성이 높으니, |