[백준 1475번] 방 번호
J-Shine
[백준 1475번] 방 번호 C++ 풀이
문제
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다.
다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
입력
첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.
출력
첫째 줄에 필요한 세트의 개수를 출력한다.
내 풀이
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int N(0);
int numArr[10] = { 0 };
int max(0);
cin >> N;
if (N == 0) {
cout << 1;
return 0;
}
while (N) {
numArr[N % 10]++;
N /= 10;
}
numArr[9] += numArr[6]; numArr[6] = 0;
max = numArr[0];
for (int i = 0; i < 9; i++) {
if (max < numArr[i]) max = numArr[i];
}
if (numArr[9] / 2 >= max) {
if (numArr[9] % 2 == 1) max = numArr[9] / 2 + 1;
else max = numArr[9] / 2;
}
cout << max;
}
나누기를 이용할 땐 0을 나누는 경우를 예외처리 해주어야 한다.
더 좋은 풀이
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
string s;
int numArr[10] = { 0 };
int max(0);
cin >> s;
for (auto e : s) {
numArr[e - '0']++;
}
numArr[9] += numArr[6]; numArr[6] = 0;
max = numArr[0];
for (int i = 0; i < 9; i++) {
if (max < numArr[i]) max = numArr[i];
}
if (numArr[9] / 2 >= max) {
if (numArr[9] % 2 == 1) max = numArr[9] / 2 + 1;
else max = numArr[9] / 2;
}
cout << max;
}
string은 문자열로서 배열 + ‘\0’이므로 string으로 받으면 바로 배열로 받은 것과 마찬가지이다.