본문 바로가기

문제 풀이/Baekjoon

[백준] S5 1475번 방 번호 (JAVA)

문제 출처 - Baekjoon Online Judge

문제는 여기

 

1475번: 방 번호

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

www.acmicpc.net

[문제] 

다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.

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

[입력]

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

[출력]

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

 


[풀이]

1. 값들을 입력받아준다.

2. 각 자릿수를 나눠서 각 숫자의 갯수를 구해준다.

3. 6과 9는 같이 사용할 수 있으므로 둘의 평균 개수를 구해준다.

4. 모든 숫자의 개수중 최고 개수를 구해준다.

5. 4. 에서 구한 결과를 출력한다.

[접근]

1. 6과 9는 합쳐서 구해주고 2로 나눠서 평균값을 구해 사용하고 나머지 숫자들은 개별 개수를 구해서 최대 개수를 구하면 된다고 생각했다.

[코드]

import java.io.*;

public class Main {
	static int n;
	static int arr[];
	static int max;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		n = Integer.parseInt(br.readLine());
		
		arr = new int[9];
		
		// 각 자리수로 나눠서
		// 어떤 숫자를 사용해야하는지 구하기
		while (n > 0) {
			int i = n % 10;
			
			if (i != 9)
				arr[i]++;
			else
				arr[6]++;
			
			n /= 10;
		}
		
		// 6과 9를 사용할 수 있으니까 반으로 처리하는데
		// 나머지가 있으면 1증가 아니면 0증가
		arr[6] = arr[6] % 2 == 0 ? arr[6] / 2 : (arr[6] + 1) / 2;  
		
		// 최대 갯수를 구하기
		for (int i = 0; i < 9; i++) {
			max = Math.max(max, arr[i]);
		}
		
		System.out.println(max);
	}
}