항해를 시작한 첫 주차의 목표는 두가지였다. 첫 번째는 강의를 듣고 개인과제를 풀어보는 것이었고, 두 번째는 팀원들과 함께 숫자야구를 구현해보는 것이었다.
숫자야구를 통해 간단한 프로그램을 구현해았는데 여러가지로 기억이 많이 남는 한 주였다. 그 동안 배웠던 조건문과 반복문을 마음껏 써보고, 주어진 조건을 다 만족할 수 있게 프로그램을 짜면서 몰입하며 고민해보기도 했다. 에러나 예기치 못한 문제가 발생했을 때 트러블 슈팅을 해 본 것도 기억에 많이 남았다.
- 컴퓨터는 0과 9 사이의 서로 다른 숫자 3개를 무작위로 뽑습니다.
(ex) 123, 759- 사용자는 컴퓨터가 뽑은 숫자를 맞추기 위해 시도합니다.
- 컴퓨터는 사용자가 입력한 세자리 숫자에 대해서, 아래의 규칙대로 스트라이크(S)와 볼(B)를 알려줍니다.
- 숫자의 값과 위치가 모두 일치하면 S
- 숫자의 값은 일치하지만 위치가 틀렸으면 B
- 기회는 무제한이며, 몇번의 시도 후에 맞췄는지 기록됩니다.
- 숫자 3개를 모두 맞춘 경우, 게임을 종료합니다.
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> intList = new ArrayList<Integer>();
Scanner sc = new Scanner(System.in);
Random rd = new Random();
System.out.println("컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!");
int count = 0;
// 랜덤한 수 3개를 만들어 각각 변수에 넣는다.
int num1 = rd.nextInt(10);
int num2 = rd.nextInt(10);
int num3 = rd.nextInt(10);
while (true) { // 중복제거
if ((num1 == num2) || (num2 == num3) || (num1 == num3) ) {
num1 = rd.nextInt(10);
num2 = rd.nextInt(10);
num3 = rd.nextInt(10);
} else {
break;
}
}
// ArrayList에 각각 추가한다.
intList.add(num1);
intList.add(num2);
intList.add(num3);
// ArrayList에 넣은 각각의 값에 접근하여 Integer 변수에 할당한다.
Integer result1 = intList.get(0);
Integer result2 = intList.get(1);
Integer result3 = intList.get(2);
// System.out.println(result1 + "" + result2 + "" + result3);
// 컴퓨터가 설정한 랜덤 값 보여주기
while (true) {
int ball = 0;
int strike = 0;
count++;
System.out.print(count + "번째 시도 : ");
int i = sc.nextInt(); // 숫자를 입력받음
int throw1 = i / 100; // 백의 자리수
int throw2 = (i % 100)/10; // 십의 자리수
int throw3 = (i % 100)%10; // 일의 자리수
// ball 판정 조건
if((result1 == throw2) || (result1 == throw3)) {
ball++;
}
if ((result2 == throw1) || (result2 == throw3)) {
ball++;
}
if ((result3 == throw1) || (result3 == throw2)) {
ball++;
}
// strike 판정 조건
if(result1 == throw1) {
strike++;
}
if (result2 == throw2) {
strike++;
}
if (result3 == throw3) {
strike++;
}
// 종료 조건
if((result1 == throw1)
&& (result2 == throw2)
&& (result3 == throw3)) {
System.out.println(strike + "S");
System.out.println(count + "번만에 맞히셨습니다.");
System.out.println("게임을 종료합니다.");
break;
}
// 판정
System.out.println(ball + "B" + strike + "S");
}
}
}
int throw1 = sc.nextInt(); // 백의 자리
int throw2 = sc.nextInt(); // 십의 자리
int throw3 = sc.nextInt(); // 일의 자리
// 이런식으로 단순하게 입력받으려고 생각했는데, 오판이었다.
// 예를 들어, 576이라는 수를 입력하려고 하면
5 7 6 // 이렇게 입력해야 하거나
5
7
6
// 이렇게 입력해야 하는 상황이 발생했다.
int i = sc.nextInt(); // 숫자를 입력받음
int throw1 = i / 100; // 백의 자리수
int throw2 = (i % 100)/10; // 십의 자리수
int throw3 = (i % 100)%10; // 일의 자리수