📟 풀이과정
- 랜덤숫자를 뽑는다 -> 랜덤숫자를 인덱스별로 비교하기 위해서 배열로 만든다.
- 중복되지 않은 랜덤숫자를 만들기 위해서 Set을 사용한다.
- 입력값을 배열로 만든다.
- for문, 조건문을 통해서 랜덤값과 배열값을 비교하고
strike
와ball
을 판단한다.- 출력값을 설정한다.
1&2. 랜덤숫자 뽑기
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random random = new Random();
Set<Integer> randomNumber = new HashSet<>();
while (randomNumber.size()<3){
randomNumber.add(random.nextInt(10));
}
Integer[] numRan = new Integer[randomNumber.size()];
randomNumber.toArray(numRan);
int numCount = 1;
int strikeIndex = 0;
int ballIndex = 0;
}
randomNumber.add(random.nextInt(10))
0~9까지의 랜덤 수를 배열에 추가
randomNumber.toArray(numRan)
컬렉션을 배열로 바꾸기 ->Set
은 순서가 없기때문에 인덱스를 특정할 수 있는 배열로 변환
3. 입력값 배열
while(true) {
System.out.print(numCount + "번째 시도 : ");
int num = sc.nextInt();
String numStr = Integer.toString(num);
int[] arr = new int[numStr.length()];
for (int i = 0; i < numStr.length(); i++) {
arr[i] = Character.getNumericValue(numStr.charAt(i));
}
입력값 int를 string으로 변환한 뒤, 스트링배열을 하나의 char로 바꾸어서 각 배열에 저장
->arr[i]
번째의 인덱스를numStr
의char[i]
번째로 변환, "1" -> 숫자 1
->사용자 입력값을 인덱스별로 추출 -> arr
Character.getNumericValue(numStr.charAt(i))
numStr.charAt(i)
numStr의 i번째 배열을 ->Character.getNumericValue
숫자로 변환
4&5. 스트라이크 볼 구별, 출력
for (int i = 0; i < numStr.length(); i++) {
if(numRan[i] == arr[i]){
strikeIndex++;
} else if(randomNumber.contains(arr[i])){
ballIndex++;
}
}
if(strikeIndex == 3){
System.out.println("3S");
} else if(ballIndex == 3){
System.out.println("3B");
} else {
System.out.println(ballIndex + "B" + strikeIndex + "S");
}
if(strikeIndex == 3){
System.out.println(numCount + "번째 시도만에 맞췄습니다");
System.out.println("게임을 종료합니다");
break;
}
strikeIndex = 0;
ballIndex = 0;
numCount ++
}
각 인덱스별 숫자가 똑같으면
strike
카운트 , 그렇지 않으면ball
카운트를 하고 그에 따른 출력값 설정
사용자가 다시 시도하기 위해strikeIndex
balLIndex
값 0으로 초기화, ~번째 시도의 카운트를 위해numCount
는++