본문 바로가기

알고리즘/백준 문제풀기

BOJ 백준 1475 방 번호 <문자열 처리>

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


< 방 번호 >


 이 문제는 0~9의 숫자카드가 한 개씩 들어있는 숫자카드 세트가 있다고 했을 때


특정 수를 만들기 위해 몇 개의 세트가 존재하는 지 출력해주면 되는 간단한 문제이다.


6과 9는 서로 바꿔쓸 수 있으므로 6과 9를 같은 숫자카드라고 생각하고 풀어도 된다.


입력을 받고 입력된 숫자에 사용된 각 숫자들의 개수를 검사해주고 가장 많이 사용된 숫자에 따르면 된다.


arr[10]과 같이 0~9의 개수를 저장할 배열을 만들어 주고 개수를 모두 구한 다음에 마지막에


(arr[6] + arr[9] + 1) / 2를 해주어도 되고 애초에 숫자를 검사하여 배열에 저장해줄 때


9일 경우에 arr[6]에 더해주어도 된다.


간단하게,


1. 0부터 9까지 숫자가 몇 개 있는 지 저장할 배열


2. 6과 9는 합쳐준 뒤 1을 더하고 2를 나누어주기


1을 더해주는 이유는 6과 9가 함께 1, 3, 5처럼 홀수인 경우를 고려하기 위함


3. 배열에서 가장 큰 숫자에 따라 세트의 개수가 결정


#include <iostream>

using namespace std;

int arr[10];

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

	char str[10] = { 0 };
	cin >> str;
	int cnt = 0;

	for (int i = 0; str[i] != NULL; ++i)
	{
		int num = str[i] - '0';
		if (num == 9) num = 6;
		++arr[num];
	}
	arr[6] = (arr[6] + 1) / 2;

	int iMax = -1;
	for (int i = 0; i < 9; ++i)
	{
		if (iMax < arr[i]) iMax = arr[i];
	}
	cout << iMax << '\n';

	return 0;
}