필요하다고 생각한 메서드 :
run( ArrayList<Integer> arr ) : arr 안에 i, i+1, i+2가 존재하면 true 반환
triplete( ArrayList<Integer> arr ) : arr 안에 i가 3번 이상 존재하면 true 반환
caseCheck( ArrayList<Integer> arr ) : RR RT TR TT 가 둘 다 true이면 true 반환 , 아니면 flase
babyGin( String str ) : 입력받은 문자열을 한 글자씩 int로 변환해 어레이리스트에 저장
caseCheck메서드가 true면 baby-gin 출력
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Q3 {
static int cnt = 0;
static ArrayList<String> result = new ArrayList<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.println("6개의 숫자를 입력하세요 : ");
String user_input = sc.next();
Q3 q3= new Q3();
q3.babyGin(user_input);
} catch(Exception e) {
System.out.println("잘못된 입력입니다.");
}
}
//Baby-gin 확인하는 메서드
public void babyGin(String str) {
ArrayList<Integer> arr = new ArrayList<>();
// 문자열 한 글자 씩 int로 변환 후 arr에 저장
for (int i = 0; i < str.length(); i++) {
arr.add(Character.getNumericValue(str.charAt(i)));
}
//caseChek가 true이면 Baby-gin
if(caseCheck(arr)) {
System.out.println("\nbaby-gin입니다 !");
} else {
System.out.println("baby-gin이 아닙니다.");
}
}
// rr tr rt tt case 체크
public boolean caseCheck(ArrayList<Integer> arr) {
ArrayList<Integer> temp;
//case1 R R
temp = (ArrayList<Integer>)arr.clone();
if(run(temp) && run(temp)) {
for(String s : result) {
System.out.print(s+" ");
}
result.clear();
return true;
}
//case2 R T
temp = (ArrayList<Integer>)arr.clone();
if(run(temp) && triplete(temp)) {
for(String s : result) {
System.out.print(s+" ");
}
result.clear();
return true;
}
//case3 T R
temp = (ArrayList<Integer>)arr.clone();
if(triplete(temp) && run(temp)) {
for(String s : result) {
System.out.print(s+" ");
}
result.clear();
return true;
}
//case4 T T
temp = (ArrayList<Integer>)arr.clone();
if(triplete(temp) && triplete(temp)) {
for(String s : result) {
System.out.print(s+" ");
}
result.clear();
return true;
}
return false;
}
// run
public boolean run(ArrayList<Integer> arr) {
int n1;
int n2;
int n3;
for (int i = 0; i < arr.size(); i++) {
if (arr.contains(arr.get(i)) && arr.contains(arr.get(i)+1) && arr.contains(arr.get(i)+2)) { //i, i+1, i+2가 포함되면
n1 = arr.get(i); n2 = arr.get(i)+1; n3 = arr.get(i)+2;
result.add(""+n1+n2+n3);
arr.remove(arr.indexOf(n1));
arr.remove(arr.indexOf(n2));
arr.remove(arr.indexOf(n3));
cnt++;
return true;
}
}
return false;
}
//triplete
public boolean triplete(ArrayList<Integer> arr) {
int temp;
for(int i=0; i<arr.size(); i++) {
if(Collections.frequency(arr, arr.get(i))>=3) { //frequency 찾는 값이 몇번 나오는지 리턴, -> 3번 이상이면 triplete
temp = arr.get(i);
result.add(""+arr.get(i)+arr.get(i)+arr.get(i));
arr.remove(arr.indexOf(temp));
arr.remove(arr.indexOf(temp));
arr.remove(arr.indexOf(temp));
cnt++;
return true;
}
}
return false;
}
}
'Java > 코딩테스트 연습 & 실습' 카테고리의 다른 글
[Java] 스택을 이용한 후위표기 계산기 (0) | 2022.07.14 |
---|---|
[Java] 이진검색 재귀함수로 구현하기 (0) | 2022.07.13 |
[Java] (실습) 자바 정돈된 수 (0) | 2022.07.11 |
[Java] (실습) 자바 로또 프로그램 (0) | 2022.07.11 |
[Java] (실습) 가장 작은 수로 변환 (0) | 2022.07.11 |