메모장

3,6,9 게임 본문

JAVA/[실습문제]

3,6,9 게임

Itchild 2024. 4. 8. 17:38
728x90
반응형

 

 

3,6,9 문제

출처 입력

★ 단계

9 짝 33 짝짝 939 짝짝짝

1~1000 중에서 랜덤으로 정수 1개 생성

[19] : 짝

정답입니다!

[19] : 19

오답입니다.....

[22] : 22

정답입니다!


1단계의 풀이를 먼저 써보자 !

 

먼저 -★ 한국어 풀이를 해보았다 !

1~1000까지 랜덤으로 정수 1개 생성

3,6,9 에서 짝 이라고 출력하기

369에서 짝이라고 출력 안하면 오답입니다.

369가 포함 안되어있을때 숫자를 입력하면 정답입니다.

 

 

▶ 메서드로 쓸수 있는 부분

그 값이 정답인지 아닌지 체크 하는 메서드

(정수, 문자열 )을 받는다

 

▶main 에서 해야될일

Scanner sc = new Scanner(System.in);

Random rand = new Random();

int num = rand.nextInt(1000)+1 ;

 

syso("[" + num + "] : ")

사용자가 정답을 입력할 값 받기

String name = " ";

 

만약 그런상황이 일어난다면

369가 들어갔을시 들어간 개수에 맞춰 짝을 출력

369라는 숫자가 포함 안되어있을시 숫자를 출력


▶ 한국어 풀이를 토대로 코딩 시작 !

import java.util.Random;

import java.util.Scanner;

 

public class Test03 {

public static boolean check(int num,String user) { // 정답인지 아닌지 boolean

final int NUM=num; //초기값은 변하면 안되니까 final로 설정해주기

int cnt=0; // "짝" 박수의 개수

 

int x=1000;

while(x>0) {

int n=num/x;

if(n==3 || n==6 || n==9) {

cnt++;

}

 

num=num%x; // 1234 -> 234

x=x/10;

}

 

 
 

디버깅표 그려보기

 

String ans=""; // 문자열값 초기화

for(int i=0;i<cnt;i++) { // 반복문을 통해 짝 카운트만큼 "짝" 이라고 적립

ans+="짝";

}

if(cnt==0) { // 짝이 하나도 안들어갈시에

ans=Integer.toString(NUM); // 정수에서 문자열로 int->String

} // ※같이 알기 !! 문자열에서 정수는 ? String->int는? Integer.parseInt();

 

System.out.println("ans: "+ans);

System.out.println("user: "+user);

 

if(ans.equals(user)) {// 정답과 입력한 값이 같다면 true

return true;

}

return false;

}

 

public static void main(String[] args) {

 

// int num // 그 랜덤 정수

// -> 1~1000중에서 랜덤으로 정수 1개 생성

// syso("[num] : ")

// 사용자가 입력을 시도함

// -> String user

// if(정답상황이라면,)

// syso("정답")

// else

// syso("오답")

 

Scanner sc=new Scanner(System.in);

Random rand=new Random();

int num=rand.nextInt(1000)+1;

System.out.print("["+num+"] : "); //1~1000까지 랜덤 정수 1개

String user=sc.next(); // 사용자에게 정답입력을 받는다

 

if(check(num, user)) { // 정답상황이라면,

System.out.println("정답입니다!"); // 그 숫자의 정답이 맞으면 정답

}

else {

System.out.println("오답입니다....."); // 입력한 숫자와 정답이 틀리면 오답

}

}

}


 

★★ 단계

1의 게임을 3번할건데,

3번 다 정답이면 이름을 입력받아서

ㅁㅁㅁ님 축하합니다!~~ 상품드리겠습니다!~~~

[19] : 짝

정답입니다!

[19] : 19

오답입니다.....

- 끝 -

[19] : 짝

정답입니다!

이름입력) 홍길동

홍길동님 축하합니다!~~ 상품드리겠습니다!~~~


★-2번에 대한 풀이 시작 !

먼저 -★ 한국어 풀이를 해보았다 !

 

//1의 게임을 3번 할건데

 

int i = 0;

while(i<3){

[1번코드]

if(오답이라면?) {

syso(오답입니다!)

break;

}

syso(정답입니다!)

i++;

} // while 중괄호

 

if(3번 다 정답을 맞췄다면 ?){

syso(축하합니다 이름을 입력하세요)

String name = sc.next();

syso( name + " 님 축하합니다")


▶ 한국어 풀이를 토대로 코딩 시작 !

 

final int LV=3; // 세번까지로 정해졌으니

int i=0;

while(i<LV) { // 3번까지 반복 , 그러나 몇번만에 3번이 통과될지 모르므로 while

int num=rand.nextInt(1000)+1;

System.out.print("["+num+"] : ");

String user=sc.next();

 

if(!check(num,user)) { // 오답상황이라면, -> 종료조건

System.out.println("오답입니다.....");

break;

}

System.out.println("정답입니다!");

i++;

}

 

if(i==LV) { // i ==3 // 3회 모두 맞힌사람

System.out.print("이름입력) ");

String name=sc.next();

System.out.println(name+"님, 축하합니다!~~");

}


★★★

명예의 전당

2의 게임을 통과한 사람들의 목록을 출력해주세요

1. 홍길동

2. 임꺽정

3. 철수

4. 영희

5. 코난

 

5명 찰때까지 계---속


★-3번에 대한 풀이 시작 !

먼저 -★ 한국어 풀이를 해보았다 !

 

// 2번 질문 (게임을 3번 하자 ) 이거 전에

for(명예의 전당에 저장된 사람의 수 만큼)

5명 등록하기로 했으니 5칸 배열 만들기

이름 저장이므로 String [] data = new String[5];

 

int dataCnt = 0; // 저장되는 사람의 수

while(dataCnt < data.length) { // 저장되는 사람이 배열의 크기보다 넘지 않을때까지

3번 다 통과한 사람 이름 저장

[2번 코드]

}


▶ 한국어 풀이를 토대로 코딩 시작 !

 

String[] data=new String[5]; // 5칸의 배열을 만들고

 

int dataCnt=0; // 명예의 전당에 저장된 사람의 수

 

while(dataCnt<data.length) { // 저장된 사람이 배열까지 찰때까지

 

for(int i=0;i<data.length;i++) {

System.out.println((i+1)+". "+data[i]); //몇번. 이름

}

 

int i=0;

while(i<3) {

 

int randNum=rand.nextInt(1000)+1;

System.out.print("["+randNum+"] : ");

String userAns=sc.next();

 

if(!check(randNum,userAns)) {

System.out.println("오답입니다.....");

break;

}

System.out.println("정답입니다!");

i++;

 

}

 

if(i==3) {

System.out.print("명예의 전당에 올릴 이름을 입력) ");

data[dataCnt]=sc.next();

System.out.println(data[dataCnt]+"님, 축하합니다! :D");

dataCnt++;

}

}


최종코드

 

package class07;

 

import java.util.Random;

import java.util.Scanner;

 

public class Test03 {

 

public static boolean check(int num,String user) {

final int NUM=num;

// final : 상수화

 

int cnt=0; // 박수 횟수 카운트할 변수

 

// 1. 진짜 정답을 만들기 String ans

//////////////////////////////////////////////////

int x=1000;

while(x>0) {

int n=num/x; // 1000인 경우, 1을 의미함

if(n==3 || n==6 || n==9) {

cnt++;

}

 

num%=x; // 1312인 경우, 13을 의미하게 되므로 전처리가 필수!

x/=10;

}

//////////////////////////////////////////////////

 

String ans="";

for(int i=0;i<cnt;i++) {

ans+="짝";

}

if(cnt==0) {

// 형변환(casting)

// 최초의 num값을 기억해줄 변수가 필요하구나!

ans=Integer.toString(NUM);

}

 

// 2. ans와 user를 비교

System.out.println("ans: "+ans);

System.out.println("user: "+user);

if(ans.equals(user)) {

return true;

}

return false;

}

 

public static void main(String[] args) {

 

Scanner sc=new Scanner(System.in);

Random rand=new Random();

 

// [2]의 게임을 시작하기전에,

// for(명예의 전당에 저장된 사람의 수만큼)

// 배열 OK! String[] data=new String[5];

 

String[] data=new String[5]; // 5칸의 배열을 만들고

 

int dataCnt=0; // 명예의 전당에 저장된 사람의 수

 

while(dataCnt<data.length) { // 저장된 사람이 배열까지 찰때까지

for(int i=0;i<data.length;i++) {

System.out.println((i+1)+". "+data[i]); //몇번. 이름

}

System.out.println("--------------------");

 

int i=0;

while(i<3) {

int randNum=rand.nextInt(1000)+1;

System.out.print("["+randNum+"] : ");

String userAns=sc.next();

 

if(!check(randNum,userAns)) {

System.out.println("오답입니다.....");

break;

}

System.out.println("정답입니다!");

i++;

 

}

 

if(i==3) {

System.out.print("명예의 전당에 올릴 이름을 입력) ");

data[dataCnt]=sc.next();

System.out.println(data[dataCnt]+"님, 축하합니다! :D");

dataCnt++;

}

 

}

 

}

 

}

 

728x90
반응형

'JAVA > [실습문제]' 카테고리의 다른 글

[실습 문제] 상속 (포켓몬)  (0) 2024.04.08
[자판기 프로그램]  (0) 2024.04.08
포켓몬 문제 ( class 만들기 )  (0) 2024.04.08
[과제] Class  (0) 2024.04.08
[실습] 자동차 class를 코딩하기  (0) 2024.04.08