문제
https://www.acmicpc.net/problem/1475
개념
구현
실행 결과
구현 코드(c++)
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int n; // 방번호
cin >> n;
int cnt[10] = {0}; // 0부터 9까지의 등장 횟수를 저장할 배열
while (n > 0) {
int a = n % 10;
cnt[a]++;
n /= 10;
}
// 6과 9가 등장하는 개수는 합쳐서 계산해야 함
int cnt_tmp = (cnt[6] + cnt[9] + 1) / 2;
cnt[6] = cnt_tmp;
cnt[9] = cnt_tmp;
int cnt_max = cnt[0];
for (int i = 0; i < 10; i++) {
if (cnt[i] > cnt_max) {
cnt_max = cnt[i];
}
}
cout << cnt_max;
return 0;
}
코드 설명
6과 9는 두번 등장하더라도 개수 하나로 처리해야 한다.
만약 두 세트 존재한다면 6이 2개, 9가 2개이므로 2로 나눠줘야한다.
그런데 1을 더해서 나누는 이유는 세트가 홀수개인 경우를 고려해야 하기 때문이다.
만약 세트가 5개라면 나누기를 하면서 나머지가 버려지므로 1을 더해서 세트가 부족하지 않도록 한다.
if문을 여러번 돌면서 6이랑 9에 대한 예외처리를 하는 것보다
위 방식으로 구현하는 것이 가장 효율적인 코드인듯
'PS' 카테고리의 다른 글
[코드트리] 행복한 수열의 개수 (1) | 2024.09.29 |
---|---|
[백준] 1260번: DFS와 BFS (0) | 2024.09.29 |
[백준] 5585번: 거스름돈 (0) | 2024.09.24 |
[백준] 11407번: 동전 0 (0) | 2024.09.24 |
[코드트리] 원형 수열에서의 인원 제거 (0) | 2024.09.20 |