[백준/BOJ] 백준 1475번 : 방 번호

2020. 8. 8. 03:22알고리즘 문제풀이

https://www.acmicpc.net/problem/1475

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net

9번 숫자는 6번으로 대체한다 그리고 한 세트에 9는 없고 6은 2개 있다고 가정한다. 그리고 6의 개수에 따라서 그 개수를 구하기 위한 최소 세트 수를 계산한다. 나머지 수들은 세트당 숫자가 하나씩 있으므로 필요한 개수가 그 숫자를 사기 위한 최소 세트의 수이다. 어떠한 숫자를 구하기 위한 최소 세트수가 가장 큰 것이 전체 필요한 세트 개수의 최솟값이다.

 

코드

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	string n;
	int number_set[10];
	int cnt;
	int max_num = 0;

	memset(number_set, 0, sizeof(number_set));

	cin >> n;

	//각 숫자의 개수를 구한다
	for (int i = 0; i < n.size(); i++)
	{
		//9번 숫자는 6번으로 대체한다 그리고 한 세트에 9는 없고 6은 2개 있다고 가정한다
		if (n[i] == '9')
			number_set[6]++;
		else
			number_set[n[i] - '0']++;
	}

	//한세트에 9는 없고 6이 2개 있다고 가정하므로 필요한 6의 개수에 따라서 그 개수를 구하기 위한 최소 세트 수를 계산한다
	//나머지 수들은 필요한 개수가 그 숫자를 사기위한 최소 세트의 수이다(나머지 수들은 세트당 숫자가 하나씩 있으므로)
	if (number_set[6] % 2 == 0)
		number_set[6] = number_set[6] / 2;
	else
		number_set[6] = number_set[6] / 2 + 1;

	//어떠한 숫자를 사기 위한 세트수가 가장 큰것이 필요한 세트 개수의 최솟값이다
	for (int i = 0; i < 10; i++)
	{
		max_num = max(max_num, number_set[i]);
	}

	cout << max_num;

	return 0;
}