곽로그

[백준 1475] 방 번호 본문

알고리즘/백준

[백준 1475] 방 번호

일도이동 2019. 5. 13. 19:47
반응형

 

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net

접근방법

 처음에 문제 이해를 잘못해서 다른 숫자를 고려하지 않고 6,9의 개수만 고려했다. 그러니까 예를들어 입력이 12369이면 1,2,3,(6,9) 이렇게 4세트. 처음에 좀 시간이 걸려도 문제를 제대로 이해해야 한다. 당연한 얘기지만.

 

 다시. 

 

 결국 이 문제에서는 중복된 숫자가 몇개이냐가 관건이다. 예를들어 입력이 112233445577777이라고 했을때 1은 2개, 2는 2개, 3은 2개 4는 2개, 5는 2개 7은 5개 이므로 7때문에 5세트가 필요하다. 즉 중복된 숫자의 개수가 가장 많은 것 만큼 세트가 필요하다는 말이 된다. 그럼 여기서 6,9에 대한 경우는 따로 생각하고 나머지 0,1,2,3,4,5,7,8중 중복된 숫자가 많은 것과 6,9에서 필요한 세트수를 비교한 다음 둘중 큰 수를 출력하면 된다. 

 

 여기서 배운 거 하나는, 자바에는 기본형을 다른 기본형으로 변환하는 메서드를 제공하지 않는다. Integer.parseInt는 String을 int로 변환하는 거다. 이 문제에서 입력을 String으로 받고 charAt을이용해 char를 int로 바꾸려면 아스키코드를 이용해야 한다. 즉, charAt(i)-48로 char를 int로 바꿔야한다. 

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		String numbers=in.next();
		int max=0;
		int sixAndNine=0;
		
		int[] numberArray=new int[numbers.length()];
		int[] zeroToNine=new int[10];
		
		for(int i=0;i<numbers.length();i++) {
			numberArray[i]=numbers.charAt(i)-48;
			zeroToNine[numberArray[i]]++;
		}
		
		for(int i=0;i<zeroToNine.length;i++) {
			if(i==6 || i==9) {
				continue;
			}
			else {
				if(zeroToNine[i]>=max) {
					max=zeroToNine[i];
				}
			}
		}
		sixAndNine=((zeroToNine[6]+zeroToNine[9])%2==0)?(zeroToNine[6]+zeroToNine[9])/2:(zeroToNine[6]+zeroToNine[9])/2+1;
		max=(max>=sixAndNine)?max:sixAndNine;
		
		System.out.println(max);
		
		
		
		
		
	}
}
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 2753] 윤년  (0) 2019.10.27
[백준 1011] Fly me to the Alpha Centauri  (0) 2019.05.15
[백준 10250] ACM호텔  (0) 2019.05.07
[백준 2839] 설탕배달  (0) 2019.05.03
[백준 1977] 완전제곱수  (0) 2019.05.03
Comments