반응형

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

 

1475번: 방 번호

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

www.acmicpc.net

 

 

💡 방 번호
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

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

[출력]
첫째 줄에 필요한 세트의 개수를 출력한다.

 

 

✅ 문제 풀이
  • 주어진 방번호 N의 각 자리 수를 구해야한다.
    N을 10으로 나눈 나머지를 구하면 된다.
  • 그리고 그 값을 카운트 해준 후, N을 10으로 나눈 몫으로 갱신한다.
  • 카운트 하기 위해서 0부터 9까지의 출현 빈도를 저장할 배열을 선언해준다.
  • 만약 각 자리의 수가 6또는 9이면, 6번 인덱스와 9번 인덱스의 값을 비교해서 똑같은 경우 6에 먼저 카운트 되도록 하고, 아니면 9에 카운트 되도록 한다.
    6과 9는 뒤집어서 서로를 사용할 수 있기 때문이다.
  • 그렇지 않다면 그냥 그 수에 해당하는 인덱스의 값에 카운트 되도록 한다.
  • 필요한 상자수는 배열에서 가장 MAX인 값과 같게 된다.

 

✏ 코드 전문
#include<iostream>

using namespace std;

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

	int arr[10] = { 0 };
	int N;
	cin >> N;

	while (N > 0) {
		if (N % 10 == 6 || N % 10 == 9) {
			if (arr[6] == arr[9]) arr[6]++;
			else arr[9]++;
		}
		else arr[N % 10]++;

		N /= 10;
	}

	int max = arr[0];
	for (int i = 1; i < 10; i++) {
		if (max < arr[i]) max = arr[i];
	}

	cout << max;

	return 0;
}
반응형

+ Recent posts