본문 바로가기
Programming Solve/BOJ

BOJ 1475 (C++)

by msm1029 2020. 12. 1.
반응형

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