Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 자바
- 코딩문제
- Java
- css
- github
- 정렬 알고리즘(sort algorithm)
- 코딩테스트 준비
- aop
- 회고
- 자료구조
- GIT
- 코딩
- 배열
- cs 공부)준비
- 99클럽
- 프로그래머스
- 메서드
- Entity
- CS
- Til
- 개발자 취업
- 이진 탐색(binary search)
- 항해99
- 코딩공부
- HTML
- wil
- Grafana
- ArrayList
- Spring
- 면접(java
Archives
- Today
- Total
hayu's 개발 일지
[TIL]240208 팀 프로젝트 / 숫자 야구 게임 본문
숫자 야구 게임
과제 조건
- 컴퓨터는 0과 9 사이의 서로 다른 숫자 3개를 무작위로 뽑습니다. (ex) 123, 759
- 사용자는 컴퓨터가 뽑은 숫자를 맞추기 위해 시도합니다.
- 컴퓨터는 사용자가 입력한 세자리 숫자에 대해서, 아래의 규칙대로 스트라이크(S)와 볼(B)를 알려줍니다.
- - 숫자의 값과 위치가 모두 일치하면 S
- - 숫자의 값은 일치하지만 위치가 틀렸으면 B
- 기회는 무제한이며, 몇번의 시도 후에 맞췄는지 기록됩니다.
- 숫자 3개를 모두 맞춘 경우, 게임을 종료합니다.
진행 방식
컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!
1번째 시도 : 134
0B0S
2번째 시도 : 238
1B1S
3번째 시도 : 820
2B1S
4번째 시도 : 028
3B
5번째 시도 : 280
3S
5번만에 맞히셨습니다.
게임을 종료합니다.
프로젝트 코드(수정 전)
package hh19;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Random;
public class TeamProject1 {
public static void main(String[] args) {
// 1. 랜덤 객체 생성
Random random = new Random();
// 2. 컴퓨터 배열 생성
int[] intArray = new int[3];
// 3. 중복 제거한 랜덤 구하기
for (int i = 0; i < 3; i++) {
intArray[i] = random.nextInt(10);
for (int j = 0; j < i; j++) {
if (intArray[i] == intArray[j]) {
i--;
}
}
}
// 컴퓨터의 숫자 배열 출력 (참고용)
// for (int i = 0; i < 3; i++) {
// System.out.print(intArray[i]);
// }
// 사용자 입력 숫자 배열 생성
System.out.println("컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!");
Scanner sc = new Scanner(System.in);
String num = sc.next();
System.out.println("우리가 친 숫자는 :" + num);
// Stirng으로 입력 받은 사용자 숫자를 int형 배열로 형변환
String[] myString = num.split("");
int[] myNumber = new int[3];
for (int i = 0; i < myString.length; i++) {
myNumber[i] = Integer.parseInt(myString[i]);
}
// Strike, Ball, howMany(도전 횟수) 0으로 변수 초기화
int Strike = 0;
int Ball = 0;
int howMany = 0;
// 컴퓨터의 숫자와 사용자의 숫자가 일치하는지 여부 판별
// 정답을 맞추기 전까지 반복
while (!(Arrays.equals(intArray, myNumber))) {
// 정답을 못 맞추는 경우
// 컴퓨터의 숫자 배열을 하나하나씩 사용자의 숫자와 비교 (3x3=9, 모든 경우의 수)
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < myNumber.length; j++) {
// 숫자 값 동일, 숫자 위치 동일한 경우
if (intArray[i] == myNumber[j] && i == j) {
// Strike 횟수 누적
Strike++;
}
// 숫자 값만 동일한 경우
else if (intArray[i] == myNumber[j] && i != j) {
// Ball 횟수 누적
Ball++;
}
}
}
// 틀린 횟수 누적
howMany++;
// 예시 형식에 맞춰 Strike, Ball 출력 -수정하기
if (Strike == 3) {
System.out.println(Strike + "S");
} else if (Ball == 3) {
System.out.println(Ball + "B");
} else {
System.out.println(Ball + "B" + Strike + "S");
}
// 컴퓨터의 숫자와 사용자의 숫자 비교 후 다시 loop 진행을 위해 변수 초기화
// Strike, Ball 0으로 초기화
Strike = 0;
Ball = 0;
// 사용자의 숫자 다시 입력 받아 초기화
num = sc.next();
// 사용자의 숫자 출력 (참고용)
// System.out.println("우리가 친 숫자는 :"+num);
// 입력 받은 Stirng형 사용자의 숫자를 int형 배열로 변환
myString = num.split("");
for (int i = 0; i < myString.length; i++) {
myNumber[i] = Integer.parseInt(myString[i]);
}
}
// while문 밖 : 정답을 맞춘 경우
// 여태까지 도전한 횟수에 마지막 한 번 포함
howMany += 1; //위에 초기화 값을 1로 수정
System.out.println("3S");
// 결과 출력하기
System.out.println(howMany + "번만에 맞히셨습니다.");
System.out.println("게임을 종료합니다.");
}
}
프로젝트 코드(수정 후)
package hh19;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Random;
public class TeamProject2 {
public static void main(String[] args) {
// 1. 랜덤 객체 생성
Random random = new Random();
// 2. 컴퓨터 배열 생성
int[] intArray = new int[3];
// 3. 중복 제거한 랜덤 구하기
for (int i = 0; i < 3; i++) {
intArray[i] = random.nextInt(10);
for (int j = 0; j < i; j++) {
if (intArray[i] == intArray[j]) {
i--;
}
}
}
// 컴퓨터의 숫자 배열 출력 (참고용)
// for (int i = 0; i < 3; i++) {
// System.out.print(intArray[i]);
// }
// 사용자 입력 숫자 배열 생성
System.out.println("컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!");
Scanner sc = new Scanner(System.in);
int[] myNumber = new int[3];
// Strike, Ball, howMany(도전 횟수) 0으로 변수 초기화
int Strike = 0;
int Ball = 0;
int howMany = 0;
// 컴퓨터의 숫자와 사용자의 숫자가 일치하는지 여부 판별
// 정답을 맞추기 전까지 반복
while (!(Arrays.equals(intArray, myNumber))) {
// 사용자의 숫자 다시 입력 받아 초기화
String num = sc.next();
System.out.println(howMany + 1 + "번째 시도 : " + num);
// Stirng으로 입력 받은 사용자 숫자를 int형 배열로 형변환
String[] myString = num.split("");
for (int i = 0; i < myString.length; i++) {
myNumber[i] = Integer.parseInt(myString[i]);
}
// 정답을 못 맞추는 경우
// 컴퓨터의 숫자 배열을 하나하나씩 사용자의 숫자와 비교 (3x3=9, 모든 경우의 수)
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < myNumber.length; j++) {
// 숫자 값 동일, 숫자 위치 동일한 경우
if (intArray[i] == myNumber[j] && i == j) {
// Strike 횟수 누적
Strike++;
}
// 숫자 값만 동일한 경우
else if (intArray[i] == myNumber[j] && i != j) {
// Ball 횟수 누적
Ball++;
}
}
}
// 틀린 횟수 누적
howMany++;
// 예시 형식에 맞춰 Strike, Ball 출력
if (Ball == 3) {
System.out.println(Ball + "B");
} else if (Strike == 3) {
System.out.println(Strike + "S");
} else {
System.out.println(Ball + "B" + Strike + "S");
}
// 컴퓨터의 숫자와 사용자의 숫자 비교 후 다시 loop 진행을 위해 변수 초기화
// Strike, Ball 0으로 초기화
Strike = 0;
Ball = 0;
}
// 결과 출력하기
System.out.println(howMany + "번만에 맞히셨습니다.");
System.out.println("게임을 종료합니다.");
}
}
- 중복된 코드를 제거했다. / 코드에서 불필요하게 중복되는 부분들이 있어서 개선했다.
출력 예시
컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!
123
1번째 시도 : 123
1B0S
145
2번째 시도 : 145
0B0S
256
3번째 시도 : 256
0B1S
278
4번째 시도 : 278
0B0S
896
5번째 시도 : 896
1B1S
926
6번째 시도 : 926
0B2S
826
7번째 시도 : 826
0B1S
936
8번째 시도 : 936
3S
8번만에 맞히셨습니다.
게임을 종료합니다.
회고
배운점
- 배열 활용
- 배열을 나누어 비교하는 것.
- 중복된 숫자 제거하는 것.
- 배열 일치 여부법.
많은 것을 배웠고, 활용해봐야겠다는 생각을 했다.
아쉬운점
- 코드를 더 깔끔하게 짜지못한 것.
- 다음에는 배열이 아닌 문자열로 코드를 짜보고 싶다.
- 중복되는 코드 확인을 못한 것.