https://www.acmicpc.net/problem/1475
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.
입력받은 숫자가 담긴 문자열을 하나씩 나눠서 0~9를 의미하는 num배열에 각 수가 맞으면 정수로 변환하여 배열의 값을 높여준다. 이때 6과9는 서로 바꿀수 있으므로 num[6]에다 넣어주고 2로 나눈 나머지와 몫의값으로 그값을 계산한다. 결국에는 num배열에 속한 값중 가장 높은값이 set의 개수가 되므로 정렬하여 마지막 배열값을 출력 하면 된다.
import java.util.Scanner;
import java.util.Arrays;
public class Main{
public static int solution(String str){
int num[]= new int[10];
for(int i=0; i< str.length();i++){
char a = str.charAt(i);
if(a=='9') a='6';
int ia = a-'0'; // char를 int로 변환
num[ia]++;
}
num[6]=num[6]/2+num[6]%2;
Arrays.sort(num);
return num[9];
}
public static void main(String[]args){
Scanner sc= new Scanner(System.in);
String str= sc.nextLine();
System.out.println(solution(str));
}
}
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Arrays;
public class Main{
public static int solution(String str){
int num[]= new int[10];
for(int i=0; i< str.length();i++){
char a = str.charAt(i);
///if(a=='9') a='6';
int ia = a-'0'; // char를 int로 변환
num[ia]++;
}
num[6]=num[6]/2+num[6]%2;
Arrays.sort(num);
return num[9];
}
public static void main(String[]args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
N=N.replace('9','6');
System.out.println(solution(N));
}
}
scanner를 사용하니 실행시간이 너무 오래걸렸고 그래서 BufferedReader로 바꾸니 buffer를 사용하여 실행시간이 확실히 줄었음을 알게되었다. 또한 replace를 사용해 문자열에서 미리 9를 6으로 변환시켰다. 또한 throws IOException 을 사용하여 예외 처리를 해주었다.