문제
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
입력
첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 필요한 세트의 개수를 출력한다.
풀이 1 (틀림)
실버 5로 많이 어렵진 않은 문제 같은데.. 아이디어가 생각이 안 나서 일단 더럽게 짜봤고 당연히 틀렸다! ㅎㅎ..
6이랑 9 처리를 어떻게 해야 할까 고민하다가 잘 모르겠어서 다른 분 풀이를 참고했다.
배열 사용법도 아예 다르게 생각해야 하는 것 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
int[] arr = new int[10]; // 사용하지 않은 경우 0, 사용한 경우 1
int cnt = 1;
for (int i = 0 ; i < N.length(); i++) {
int idx = N.charAt(i)-'0';
if (idx == 6 || idx == 9) {
if (arr[6] == 1 && arr[9] == 1) {
cnt++;
arr = new int[10]; // arr 초기화
} else if (arr[6] == 1 && arr[9] != 1) {
arr[9] = 1;
} else {
arr[6] = 1;
}
} else {
if (arr[idx] == 1) { // 새로운 세트를 추가
cnt++;
arr = new int[10];
} else {
arr[idx] = 1;
}
}
}
System.out.println(cnt);
}
}
풀이 2 (맞음)
배열에 cnt +1을 해주면서 마지막에 가장 높은 수를 출력해야 한다. 6과 9는 배열 한 칸으로 처리하고, 마지막에 평균을 구하기 위해 2로 나누고 나머지 값을 더해준다.
배열에서 가장 큰 수를 찾아 출력하면 된다.
정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
int[] arr = new int[9]; // 6과 9는 하나로 합침
for (int i = 0 ; i < N.length(); i++) {
int idx = N.charAt(i)-'0';
if (idx == 9) {
arr[6]++;
} else {
arr[idx]++;
}
}
arr[6] = (arr[6] / 2) + (arr[6] % 2);
Arrays.sort(arr);
System.out.println(arr[8]);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11328: Strfry (JAVA) (0) | 2024.06.01 |
---|---|
[백준] 11721: 열 개씩 끊어 출력하기 (JAVA) (0) | 2024.06.01 |
[백준] 1543: 문서 검색 (JAVA) (1) | 2024.03.25 |
[백준] 2667: 단지번호붙이기 (JAVA) (0) | 2024.02.29 |
[백준] 2606: 바이러스 (JAVA) (1) | 2024.02.26 |