728x90
728x90
문제
https://www.acmicpc.net/problem/1475
코드
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
// N=0 일때는 max 값은 1이므로 ans를 1로 둔다.
int N, a[10] = {}, ans = 1;
cin >> N;
// 자리수 추출
while (N) { //정수 0을 제외한 값은 모두 1(true)의 값을 갖는다.
a[N % 10]++;
N /= 10;
}
for (int i = 0; i < 10; i++) {
if (i == 6 || i == 9) continue; //일단 6, 9박스일 경우를 제외했을때 최댓값
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;
}
설명
한 세트에 0,1,2,3,4,5,6,7,8,9 가 들어있는것..
예를 들어 1226696 이란 방 번호가 있으면 6696은 두세트로 해결 할 수 있으므로 두세트만 있으면 된다.
일단 6,9가 몇번 사용되었는지를 제외하고 for문을 돌리고 배열에 저장되어있는 값들 중 최댓값을 구한다!!
그리고 나중에 (a[6] + a[9] +1 )/2 가 6,9 사용했을때 필요한 세트 수 이므로 만약에 (a[6] + a[9] +1 )/2 값이 이전에 for문 돌리면서 구했던 최댓값보다 크다면 (a[6] + a[9] +1 )/2 값을 최댓값으로 정한다!
만약에 번호가 66669이면 3세트가 필요하다 (6,6)(6,6)(9) 이렇게 3세트 필요한것이다
코드로 다시 설명하자면...
a[6] =4, a[9] =1 이므로 (4+1)/2 =2.xxx 의 올림한 값, 즉 3세트가 필요하다!!
이 결과를 도출해내는게 정말 쉽지 않은것같다...
728x90
728x90
'개발 > 백준 & 프로그래머스' 카테고리의 다른 글
[백준]11047번 동전 0 c/c++ (0) | 2022.08.02 |
---|---|
[백준]3273번 두 수의 합 c/c++ (0) | 2022.08.01 |
[백준]1926번 그림 c++ (0) | 2022.07.28 |
[백준]11653번 소인수분해 c++ (0) | 2022.07.19 |
[백준]1978번 소수 찾기 c/c++ (0) | 2022.07.11 |