반응형
출처: https://www.acmicpc.net/problem/1475
Input
126961
Output
2
0~9까지 숫자 세트를 받았을 때, 주어지는 방 번호 N을 표시하고자 한다.
6 과 9는 서로 뒤집어서 이용가능하기 때문에 대체될 수 있다.
- 동일한 숫자가 중복해서 나타나면 그에 따른 숫자 세트 '지급'이 필요하다.
- 6, 9가 서로 대체될 수 있기 때문에 이에 대한 처리만 주의한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
// 숫자를 문자열로 입력 받는다.
// 0 <= 1,000,000
String str = sc.next();
// 옆집에서 주는 숫자 세트를 배열형태로 표현
// 0~9 (여기서 주의할 점은 '6'과 '9'는 거꾸로 뒤집어 동일하게 표시할 수 있기에 예외적으로 처리할 예정)
int[] arr = new int[10];
// 초기에 한세트는 필요하므로 1로 할당
int answer = 1;
for(int i=0; i<arr.length; i++) {
arr[i] = 1;
}
// 앞에서 부터 주어진 숫자세트를 추가해야 할지 판단한다.
for(int i=0; i<str.length(); i++) {
// 입력받은 문자열에서 한개씩 들고온다.
int target = Integer.parseInt(str.substring(i, i+1));
//System.out.println("target: " + target);
// '6' 혹은 '9'의 경우에는 별도의 case로 처리
if(target == 6 || target == 9) {
// 두 숫자 모두 남은 카드가 없다면 새롭게 세트를 받아야 한다.
if(arr[6] <= 0 && arr[9] <= 0) {
// 세트를 받았으므로 모둔 숫자의 값이 증가하고
answer++;
//System.out.println("6,9 숫자 부족 세트 재지급: " + answer);
for(int j=0; j<arr.length; j++) {
arr[j]++;
}
// 그 중 '6'의 숫자를 사용해 배치하겠다.
arr[6]--;
}else { // 6 이나 9 중에 아직 사용할 수 있는 카드가 있다는 상태
if(arr[6] >= 1) {
//System.out.println("6 사용");
arr[6]--;
}else { // '6'이 없으므로 9로 처리
//System.out.println("9 사용");
arr[9]--;
}
}
}else { // '6'과 '9'가 아닌 다른 숫자.
// 만약 해당 숫자의 여분이 없다면 세트를 새로 지급
if(arr[target] <= 0) {
answer++;
//System.out.println("세트 재지급: " + answer);
for(int j=0; j<arr.length; j++) {
arr[j]++;
}
}
// 리필된 것이든 아니든 해당 카드 사용
//System.out.println(target + " 사용");
arr[target]--;
}
}
// 정답 출력
System.out.println(answer);
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 10840 구간성분 (0) | 2021.02.17 |
---|---|
[BOJ] 백준 15920 선로에 마네킹이야!! (0) | 2021.02.17 |
[BOJ] 백준 20061 모노미노도미노 2 (0) | 2021.02.17 |
[BOJ] 백준 19235 모노미노도미노 (0) | 2021.02.17 |
[BOJ] 백준 20055 컨베이어 벨트 위의 로봇 (0) | 2021.02.17 |
댓글