[Algorithm] - 백준 1475 방번호

import java.io.BufferedReader;
import java.io.InputStreamReader;

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

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.
9999 -> 2
995 -> 1
9912345780 -> 1
99912345780 -> 2
일단 9혹은 6의 갯수파악, 그리고 나머지 숫자중에서 제일 많은 횟수 파악
1. 모든 숫자중에서 9와 6 보다 나머지 숫자중에서 횟수가 가장 많으면 그 세트수 출력
2. 9와 6을 합해서 나누기 2한게 나머지 숫자보다 많으면 나눈값을 세트수로 출력
3. 9와 6을 합해서 나누기 2한게 나머지 숫자보다 적으면(같으면) 나머지 숫자중에서 가장 많은 세트수 출력
*/

public class DasomRoom {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String roomNumber = br.readLine();
       
        int result = 0;
        int lineCnt6 = 0;
        int lineCnt9 = 0;
       
        //for문으로 0부터 9까지 제일 많은 사용 된 숫자를 찾아냄.
        for(int i=0; i<10; i++){
        int lineCnt = 0;
        int fromIndex = -1;
        while ((fromIndex = roomNumber.indexOf(String.valueOf(i), fromIndex + 1)) >= 0) {
        lineCnt++;
            }
       
        if(i == 6){
        lineCnt6 = lineCnt;  //숫자 6을 따로 저장
        }else if(i == 9){
        lineCnt9 = lineCnt;  //숫자 9를 따로 저장
        }else{
        if(result < lineCnt){
        result = lineCnt;
        }
        }
        }
       
        //6과 9는 뒤집어서 사용할 수 있으니까 더해서 나누기2하면 사용되는 세트 수를 구할 수 있음
        int cnt69 = (int)Math.ceil((double)(lineCnt6 + lineCnt9)/2);
       
        if(result < cnt69){
        System.out.println(cnt69);
        }else{
        System.out.println(result);
        }
}
}

댓글