
package Baby_Gin;
import java.util.Scanner;
public class babyGin {
public static void main(String[] args) {
int triplet = 0; // 같은수 3개
int run = 0; // 연속된 수 3개
// Baby-Gin = triplet이나 run으로만 이루어진 수 (triplet 2 / (triplet 1, run 1) / run 2)
int[] count = new int[10];
System.out.print("6자리의 숫자를 연속으로 입력하세요: ");
Scanner sc = new Scanner(System.in);
int str = sc.nextInt();
//System.out.println(str);
String strr = String.valueOf(str);
if(strr.length() == 6) {
for(int i=0;i<6;i++) {
count[str % 10]++;
str /= 10;
}
//ex: 345555
// 0 1 2 3 4 5 6 7 8 9
// 0 0 0 1 1 4 0 0 0 0
// 0 0 0 1 1 1 0 0 0 0
//ex: 414243
// 0 1 2 3 4 5 6 7 8 9
// 0 1 1 1 3 0 0 0 0 0
// 0 0 0 0 0 0 0 0 0 0
//ex: 444444 -> i--; 필요 // 4를 건너 뛰어버리기 떄문에
// 0 1 2 3 4 5 6 7 8 9
// 0 0 0 0 6 0 0 0 0 0
// 0 0 0 0 0 0 0 0 0 0
//ex: 123345 -> i--; 필요 // 3을 건너 뛰어버리기 떄문에
// 0 1 2 3 4 5 6 7 8 9
// 0 1 1 2 1 1 0 0 0 0
// 0 0 0 1 1 1 0 0 0 0
for(int i=0;i<10;i++) { //count가 4이상인 원소가 있다면, 같은수가 3개가 넘게되므로 triplet이고, 3개만큼 카운트를 빼야함
//System.out.println(i + ": " + count[i]);
if(count[i] >= 3) {
triplet++;
count[i] -= 3;
i--; // 같은숫자가 6개있을 경우 이걸 안해주면 그냥 건너뛰어버리기떄문에 triplet == 2가 되지 않는다.
}
if(count[i] >= 1 && count[i+1] >= 1 && count[i+2] >= 1) {
run++;
count[i]--;
count[i+1]--;
count[i+2]--;
i--; // 123345나 123234 처럼 2나 3이 2번반복된경우 이걸 안해주면 4로건너뛰기때문에 run == 2가 되지 않는다.
}
}
if(triplet + run == 2) { // 온전히 triplet 또는 run이거나, 두개 모두 1이어야 하므로
System.out.println("입력받은 숫자는 Baby-Gin입니다.");
} else {
System.out.println("입력받은 숫자는 Baby-Gin이 아닙니다.");
}
}else {
System.out.println("6자리로 입력해주세요.");
}
}
}
'코딩 테스트 > 알고리즘' 카테고리의 다른 글
백준 - 2798 블랙잭 (0) | 2021.02.11 |
---|---|
백준 2920번 - 음계 (0) | 2021.02.11 |
SWEA SW 문제해결 Self Study Book Ⅰ 3차시 - 부분집합의 합 (0) | 2020.07.26 |
1859. 백만 장자 프로젝트 (0) | 2020.06.08 |
1984. 중간 평균값 구하기 (2) | 2020.06.07 |