문제
"맞았습니다."코드
#include <bits/stdc++.h>
using namespace std;
int maxnum = 1; // 최소 세트 개수는 1개다.
int N;
int arr[10]; // 0부터 9
void func(){
cin >> N;
while(N > 0){
int target = N%10; // 자리수 1개 분리 하기
arr[target]++; // 자리수 개수 카운팅
N /= 10;
}
for(int i=0; i<=9; i++){
if(i==6 || i==9) continue;
maxnum = max(maxnum, arr[i]);
}
// (a[6]+a[9])/2를 올림한 값이
// 6, 9에 대한 필요한 세트의 수이므로 (a[6]+a[9]+1)/2을 계산
maxnum = max(maxnum, (arr[6]+ arr[9]+1) / 2);
cout << maxnum;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
func();
return 0;
}
리뷰
최소 세트 개수는 1개다.
6과 9는 서로 대신 쓸 수 있기 때문에. 마지막에 처리를 해준다.
(a[6]+a[9])/2 를 올림한 수가 6, 9에 대한 필요한 세트의 수다.
6이 2개, 9가 3개 필요한 경우, 올림한 3개의 세트가 필요하다.
6의 개수 | 9의 개수 | 필요한 세트 수 | 6와 9개수에 1을 더해서 세운 식 |
1개 | 1개 | 1개 | (1+1 +1) / 2 = 1 |
2개 | 1개 | 2개 | (2+1 +1) / 2 = 2 |
2개 | 2개 | 2개 | (2+2 +1) / 2 = 2 |
2개 | 3개 | 3개 | (2+3 +1) / 2 = 3 |
1212669 가 input으로 들어왔다고 하자.
6, 9를 제외한 다른 수를 확인했을 때 maxnum이 2 였다.
6은 2개, 9는 1개다. 6과 9만 생각하면 2세트가 있으면 된다.
maxnum = max(maxnum, (arr[6]+ arr[9]+1) / 2);
이렇게 maxnum과 비교하면 정답은 2가 된다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
strfry 백준 11328 c++ (0) | 2021.11.22 |
---|---|
두 수의 합 백준 3273번 c++ (0) | 2021.11.22 |
알파벳 개수 백준 10808번 (0) | 2021.11.21 |
숫자 백준 10093 c++ (0) | 2021.11.20 |
일곱 난쟁이 백준 2309 c++ (0) | 2021.11.20 |