roomnum
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 구현 순서
- 입력값의 자리수를 구한다
- 자리수만큼 돌면서 각 자리의 숫자 counting한 것을 배열에 저장한다
- 최고로 많이 카운팅된 값과 6, 9를 더한 값/2한 값을 비교한다
6, 9값 제외한 값 이 제일 크다면 그 값을 쓴다.
하지만 6,9 포함한 값이 크다면 6,9카운팅/2 + 나머지로 계산할 수 있다 - 만약 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);
}
}