반응형
문제(출처)
다솜이는 은진이의 옆집에 새로 이사왔다.
다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다.
한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다.
다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오.
(6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
입력
첫째 줄에 다솜이의 방 번호 N이 주어진다.
N은 1,000,000보다 작거나 같은 자연수 또는 0이다.
출력
첫째 줄에 필요한 세트의 개수를 출력한다.
예제 입력
9999
예제 출력
2
내 풀이
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;
public class Main { public static void main(String args[]) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int[] num = new int[10];// 9를 제외하고 구할 예정이지만 헷갈릴 수 있으니 0-9까지 선언합니다. try { String strNum = br.readLine(); for(int i =0; i < strNum.length(); i++){ if((strNum.charAt(i) == '6') || strNum.charAt(i) == '9') {// 6이나 9이면 6번째 인덱스를 증가시킵니다. num[6]++; }else { int idx = strNum.charAt(i)-48;// 숫자에 해당하는 인덱스의 숫자를 증분합니다. num[idx]++; } } num[6] = (num[6] / 2) + (num[6]%2);// 한 세트에 2개를 쓸 수 있으므로 6번째 인덱스의 몫과 나머지를 2로 구합니다. int max = num[0]; for(int i = 1; i < num.length; i++) {// 최고 값을 구합니다. max = Math.max(max, num[i]); } bw.write(String.valueOf(max)); bw.flush(); bw.close(); } catch (NumberFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String args[]) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int[] num = new int[10];
// 9를 제외하고 구할 예정이지만 헷갈릴 수 있으니 0-9까지 선언합니다.
try {
String strNum = br.readLine();
for(int i =0; i < strNum.length(); i++){
if((strNum.charAt(i) == '6') || strNum.charAt(i) == '9') {
// 6이나 9이면 6번째 인덱스를 증가시킵니다.
num[6]++;
}else {
int idx = strNum.charAt(i)-48;
// 숫자에 해당하는 인덱스의 숫자를 증분합니다.
num[idx]++;
}
}
num[6] = (num[6] / 2) + (num[6]%2);
// 한 세트에 2개를 쓸 수 있으므로 6번째 인덱스의 몫과 나머지를 2로 구합니다.
int max = num[0];
for(int i = 1; i < num.length; i++) {
// 최고 값을 구합니다.
max = Math.max(max, num[i]);
}
bw.write(String.valueOf(max));
bw.flush();
bw.close();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
내 풀이 해석
0~9까지 세트로 되어 있는 상자에서 중복으로 사용 할 수 있는 숫자는 6과 9입니다.
1231456이면 가장 많이 사용되는 1로 인해 두 세트를 사야합니다.
가장 많이 사용하는 수를 찾고 6과 9는 2로 나눈 몫과 나머지를 더해 구합니다.
반응형
'개발(합니다) > 알고리즘&코테' 카테고리의 다른 글
알고리즘 단계별로 풀어보기 : BOJ-2750(수정렬하기) (0) | 2018.12.26 |
---|---|
알고리즘 단계별로 풀어보기 : BOJ-6064(카잉달력) (0) | 2018.12.26 |
알고리즘 단계별로 풀어보기 : BOJ-2775(부녀회장이될테야) (0) | 2018.12.24 |
알고리즘 단계별로 풀어보기 : BOJ-10250(ACM호텔) (0) | 2018.12.24 |
알고리즘 단계별로 풀어보기 : BOJ-1011(Fly me to the Alpha Centauri) (0) | 2018.12.23 |