문제 출처 : [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회 정도 시도쯤에 문제를 잘못 이해했다는 걸 깨달았다. 😑
덕분에 시간을 많이 소요하기는 했지만, 그래도 교훈은 얻고 갈 수 있어서 다행이다.
다음부터는 문제를 정확히 이해하고 난 뒤에 풀도록 하자!😥