Problems

https://www.acmicpc.net/problem/1475

Problems solving

각 플라스틱 숫자 중 가장 많이 포함된 숫자 갯수 만큼 사면된다.
다만 6과 9는 합쳐서 계산해야하므로 ‘숫자 6,9 제외 각각 개수’와 ‘숫자 6,9 개수’ 를 비교한다(6,9개수/2+나머지로 비교)
예를 들어 번호판이 ‘212242699’라면
1: 1개
2: 4개
4: 1개
6, 9 : 3개
2번이 4개로 가장 많으므로 플라스틱 숫자판은 4개를 사면 된다

또 번호판이 6과 9를 합친개수가 많은 ‘34969241’ 이라면
1:1개
2:1개
3:1개
4:2개
5:3개

3/2 + 3%2 = 1 + 1 = 2개로 세트를 2개 사면 된다

Source 구현 순서

  1. 입력값의 자리수를 구한다
  2. 자리수만큼 돌면서 각 자리의 숫자 counting한 것을 배열에 저장한다
  3. 최고로 많이 카운팅된 값과 6, 9를 더한 값/2한 값을 비교한다
    6, 9값 제외한 값 이 제일 크다면 그 값을 쓴다.
    하지만 6,9 포함한 값이 크다면 6,9카운팅/2 + 나머지로 계산할 수 있다
  4. 만약 6과 9를 더한 값이 같거나 크다면 최고로 많이 카운팅 된 값을 수정한다

Source

import java.util.Scanner;

public class RoomNum {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int[] arrIndex = new int[10];
		int value = sc.nextInt();
		int i = 1;					// 자리수가 몇개인지 알아내기 위해서 받은 값을 나누는데 사용
		int count = 1;				// 자리수 개수
		while(true)					// 자리가 몇 개 있는지 체크
		{
			if(value/i < 10)		// 1의 자리가 되면 종료
				break;
						
			i*=10;
			++count;
		}

		int maxCount = arrIndex[0];
		int nine = 0;
		for(int k = 0; k < count; ++k)
		{
			int num = value/i;
			if(9 == num || 6 == num)
			{
				++nine;
			}
			else
			{
				++arrIndex[num];
				if(arrIndex[num] > maxCount)
					maxCount = arrIndex[num];
			}
			
			// 값을 뺀다
			value = value - (i*num); 
			i*=0.1f;
		}
		
		if(maxCount <= nine/2)
			maxCount += ((nine%2) + (nine/2) - maxCount);
		
		System.out.println(maxCount);
	}
}