[BOJ 1475] 방 번호

문제 출처 : [BOJ 1475] 방 번호, https://www.acmicpc.net/problem/1475

👨‍🏫문제

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

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


입력

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


출력

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


예제 입/출력

예제 입력
9999

예제 출력
2

💻코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class RoomNumber {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		
		// 해당 번호가 나온 횟수를 저장해주는 배열
		int[] arr = new int[10];
		
		// 가장 높은 값을 저장해 줄 변수
		int max = 0;
		
		// 6과 9가 나온 횟수를 저장해 줄 변수
		int count = 0;
		
		// 배열의 요소를 0으로 초기화
		Arrays.fill(arr, 0);
		
		/* 
		 * 문자열을 순회하며 각 숫자가 나온 횟수를 배열에 저장,
		 * 만약 6이나 9일 경우 count 변수 증가
		 */
		for(int i = 0; i < str.length(); i++) {
			if(str.charAt(i) == '9' || str.charAt(i) == '6') {
				count++;
			}
			
			arr[str.charAt(i) - '0']++;
		}
		
		/*
		 * 한 세트에 6과 9는 뒤집어서 사용 가능하다는 조건이 있다.
		 * 6이나 9가 나온 횟수가 짝수일 경우 한 세트를 맞춰서 사용했다는 소리이므로,
		 * 6과 9가 나온 횟수를 저장하는 인덱스에 나눠서 저장해준다.
		 */ 
		if(count % 2 == 0) {
			arr[9] = count / 2;
			arr[6] = count / 2;
		}
		
		// count 값이 홀수일 경우 한 세트가 더 필요한 경우이고, 각각 1씩 더해준다.
		else {
			arr[9] = (count / 2) + 1;
			arr[6] = (count / 2) + 1;
		}
		
		// 배열의 요소 중 가장 큰 값이 필요한 세트의 수 이므로, 가장 높은 값 을 max에 대입.
		for(int i = 0; i < arr.length; i++) {
			if(max < arr[i]) {
				max = arr[i];
			}
		}
		
		System.out.println(max);
	}
}

💡후기

어려운 문제는 아니었는데, 문제를 잘못 이해해서 몇 번이고 시도했던 문제다....😅

분명히 '어 이게 답이 맞을 텐데?' 하고 계속 제출했었는데, 5회 정도 시도쯤에 문제를 잘못 이해했다는 걸 깨달았다. 😑

덕분에 시간을 많이 소요하기는 했지만, 그래도 교훈은 얻고 갈 수 있어서 다행이다.

다음부터는 문제를 정확히 이해하고 난 뒤에 풀도록 하자!😥

좋은 웹페이지 즐겨찾기