알고리즘 문제풀이
[백준/BOJ] 백준 1475번 : 방 번호
GeniusJo
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;
}