반응형
1. 문제
2. 아이디어
우선 문제를 이해해보면 숫자 세트 하나에는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9가 들어있고
6과 9는 서로 뒤집어서 사용할 수 있다.
즉,
666 -> 2세트가 필요 (6, 9, 6)
6666 -> 2세트가 필요 (6, 9, 6, 9)
166 -> 1세트가 필요 (1, 6, 9)
669966 -> 3세트가 필요(6, 9, 6, 9, 6, 9)
69696 -> 3세트가 필요 (6, 9, 6, 9, 6)
이다.
메인 아이디어는 0~9의 숫자를 담을 수 있는 배열을 선언하고
숫자를 입력받으면 자릿수별로 나누어 ++해준 뒤
6과 9의 개수를 세고
6만 있는 경우와 9만 있는 경우, 그 외의 경우를 나누어 계산한다.
-> 거의 다 else 부분에서 계산되지만 99999같은 경우 num[9]에 이미 5가 들어가있어
따로 6만 있는 경우와 9만 있는 경우를 나누었다.
3. 코드
#include <iostream>
#include <algorithm>
using namespace std;
int num[10] = { 0, };
int main() {
int n;
cin >> n;
while (1) {
int tmp = n % 10;
for (int i = 0; i < 10; i++) {
if (tmp == i) {
num[i]++;
break;
}
}
if (n / 10 == 0)break;
n/= 10;
}
if (num[6] != 0 && num[9] == 0) {
num[6] = num[6] + num[6] % 2;
num[6] /= 2;
}
else if (num[9] != 0 && num[6] == 0) {
num[9] = num[9] + num[9] % 2;
num[9] /= 2;
}
else {
num[6] += num[9];
num[6] = num[6] + num[6] % 2;
num[6] /= 2;
}
cout << *max_element(num + 0, num + 10);
}
6과 9의 개수를 세는 if문이 좀 더러운데
int형으로 선언한 배열을 반올림하려면 형변환하고 double형 선언하고 이러기 귀찮아서
셀프 반올림을 했다.. ㅎㅎ
(반올림 하지 않으면 69696과 같은 숫자는 2로 나온다.)
반응형
'Programming Solve > BOJ' 카테고리의 다른 글
BOJ 20953 / C++ (0) | 2021.03.02 |
---|---|
BOJ 11558 The game of death / C++ (0) | 2021.02.12 |
BOJ 15312 이름 궁합 / C++ (0) | 2021.02.11 |
BOJ 2445 / C++ (0) | 2021.02.07 |
BOJ 1912 (C++) (0) | 2020.11.29 |