방 번호를 0, 1, 2, 3, 4, 5, 6, 7, 8, 9로 표현하려고 한다
0~9가 한 세트이고 6과 9는 돌려서 사용할 수 있다
주어진 방 번호를 최소한의 숫자 세트를 이용해서 표현하는것이 이 문제의 목표이다
방 번호
숫자를 만드는 최소한의 숫자 세트 수
각 숫자의 사용 횟수중 최대값 == 필요한 최소한의 숫자 세트 수
6,9는 합쳐서 카운팅해 주는것이 필요하다
6, 9의 개수가 나올 수 있는 경우는
1. 둘 다 짝수 개수
2. 둘 다 홀수 개수
3. 둘 중 하나만 홀수 개수
인데 1, 2는 둘을 합치면 짝수가 되고
3은 결국 홀수가 되니
짝수가 되는 경우와 홀수가 되는 경우로 나눌 수 있다
분기점을 나누지 않고 한꺼번에 표현하려면
나누기 연산과 나머지 연산을 같이 써주면 해결 가능하다
6, 9를 만들기 위한 최소 세트 수 = (6cnt + 9cnt)/2 + (6cnt + 9cnt)%2
//방 번호
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
int[] numCnt = new int[10]; //0~9
for(int i=0,size=input.length(); i<size; i++) {
int value = input.charAt(i)-'0';
numCnt[value]++; //숫자를 몇번 쓰는지 카운팅
}
int sixNineSum = numCnt[6] + numCnt[9];
numCnt[9] = 0; //6에다 몰아줄거니 9는 초기화
sixNineSum = sixNineSum/2 + sixNineSum%2; //6, 9를 한번에 표시
numCnt[6] = sixNineSum;
int max = Integer.MIN_VALUE;
for(int i=0; i<10; i++) {
if(max < numCnt[i]) {
max = numCnt[i]; //배열의 max값이 최소 세트 수
}
}
bw.write(max + "");
bw.flush();
bw.close();
br.close();
}
}