문제: 1475번: 방 번호
basic-algo-lecture/workbook/0x03.md at master · encrypted-def/basic-algo-lecture
- 강의 코드
// Authored by : OceanShape
// Co-authored by : BaaaaaaaaaaarkingDog, kiiimiiin
// http://boj.kr/a7a4aa95c4ee446990f868f926993161
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N, a[10] = {}, ans = 0;
cin >> N;
// 자리수 추출
while(N){
a[N%10]++;
N /= 10;
}
for(int i = 0; i < 10; i++){
if(i == 6 || i == 9) continue;
ans = max(ans, a[i]);
}
// (a[6]+a[9])/2를 올림한 값이 6, 9에 대한 필요한 세트의 수이므로 (a[6]+a[9]+1)/2을 계산
ans = max(ans, (a[6]+a[9]+1)/2);
cout << ans;
}
- 내 코드
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iomanip> // setprecision을 사용하기 위한 헤더
#include <climits>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n; // 다솜이의 방 번호
cin >> n;
int needNums[10] = {};
while (n > 0) {
int tmp = n % 10;
if (tmp == 6 || tmp == 9) {
if (needNums[6] > needNums[9])
needNums[9]++;
else
needNums[6]++;
}
else
needNums[tmp]++;
n /= 10;
}
int max = -1;
for (int i = 0; i < 10; i++) {
if (needNums[i] > max)
max = needNums[i];
}
cout << max << "\n";
return 0;
}
6이랑 9는 서로를 대체할 수 있다는 게 문제의 핵심이다.
6 또는 9가 필요할 때, 이미 카운트된 6과 9의 값을 비교해서 더 적은 값을 +1 해주는 식으로 구현하면 쉽게 풀 수 있는 문제였다. 출력할 때는 그냥 필요한 숫자들의 cnt 값 중 가장 큰 값을 출력해주면 된다.
나는 위 방식처럼 풀었는데 강의에서는 그냥 6과 9의 cnt 값을 더한 후에 2로 나누고, 그 값을 max 값이랑 비교해서 더 큰 값을 출력하는 식으로 했다.
다른 풀이를 알게 되어서 신기했다.