Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
more
Archives
Today
Total
관리 메뉴

개발자 도전기

[국비지원] 15일차 - 가위바위보 게임, 프로그래머스 본문

개발공부/TIL

[국비지원] 15일차 - 가위바위보 게임, 프로그래머스

jnnjnn 2024. 2. 24. 01:18

 

오늘 배운 조건문을 사용해서 컴퓨터와 하는 가위바위보 게임을 만들어보았습니다

 

가위 바위 보 순서대로 1, 2, 3을 대입하면 A 와 B가 가위바위보를 한다고 할 때

 

A 보다 B가 1이 크다면 B의 승리 ,  A보다 B가 2만큼 크다면 A의 승리,

반대로 A보다 B가 1만큼 작다면 A의 승리, A보다 B가 2만큼 작다면 B의 승리입니다.

 

package ch04.lecture.p1If;

import java.util.Scanner;
import java.util.Random;

public class C06RPS {
    public static void main(String[] args) {
        // 가위바위보 게임 만들기

        // 1, 2, 3

        
        String[] arr = {"당신이 이겼습니다", "컴퓨터가 이겼습니다", "비겼습니다"}; // 가위바위보 결과 배열
        String user_print = ""; // 가위,바위,보 중 유저가 낸 것
        String pc_print = ""; // 가위,바위,보 중 컴퓨터가 낸 것
        String result = ""; // 가위바위보 결과


        while (true) {
            Scanner scanner = new Scanner(System.in);
            Random random = new Random();
            System.out.println("가위(1), 바위(2), 보(3), 끝내기(4)를 선택하세요");

            int user = Integer.parseInt(scanner.nextLine());
            int computer = random.nextInt(1, 4);
            
            // 선택지에 없는 숫자 입력
            if (user < 1 || user > 4) {
                System.out.println("잘못 입력했습니다");
                continue;
            }
            
            if (user == 4) {
                System.out.println("가위바위보를 종료합니다.");
                break;
            }

            String userchat = user == 1 ? "가위" : user == 2 ? "바위" : user == 3 ? "보" : "잘못 입력했습니다";
            String comchat = computer == 1 ? "가위" : computer == 2 ? "바위" : "보";

            System.out.println("유저의 결과 = " + userchat);
            System.out.println("컴퓨터의 결과 = " + comchat);
            
            // 가위바위보 조건문
            if (user + 1 == computer) {
                result = arr[1];
            } else if (user + 2 == computer) {
                result = arr[0];
            } else if (user - 1 == computer) {
                result = arr[0];
            } else if (user - 2 == computer) {
                result = arr[1];
            } else if (user == computer) {
                result = arr[2];
            } else {
                result = "입력이 잘못되었습니다";
            }

            System.out.println(result);

        }

 

가위바위보가 끝나면 다시 입력받기를 반복하고, 4을 입력하면 게임을 종료합니다.

 

 


TIL

 

switch문

 

[코딩공부] switch문, switch expression

switch문은 입력 변수값과 case 값이 일치할 때 실행되는 조건문이다. if문보다 사용범위는 제한적이지만 값에 따라 출력되는 내용이 다양할 때 사용하면 좋다. switch문은 다음과 같이 사용할 수 있

abc-datatype.tistory.com

 


 

프로그래머스

 

오늘 어려웠던 문제인 최댓값 만들기(1)

 

https://school.programmers.co.kr/learn/courses/30/lessons/120847

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

보자마자 간단하게 이중for문으로 풀면 되지 않나 싶지만 조건으로 배열의 length길이만 구해서 이중으로 for문을 돌리면 원소 두 개가 아닌 배열에서 가장 큰 값 하나가 제곱되는 문제가 발생한다.

 

가장 큰 값과 그 다음으로 큰 값을 곱해야 하기 때문에 가장 큰 값을 max로 잡고 max != 인 next_max를 구했다.

하지만  배열에서 가장 큰 값이 [5, 5, 2]처럼 두 개가 존재한다면 이 방법도 오답이 된다.

 

이 부분은 이중 for문의 변수인 i 와 j로 배열의 index 값이 같지 않음 (i != j) 해결할 수 있었다.

 

이 코드의 아쉬운 점은 곱셈 연산이 for문 안에 들어있어서 매번 반복된다는 점이다.

다른 사람의 풀이를 보니 곱연산은 for문 밖으로 뺀 후 변수값의 대입 순서를 조절해서도 풀 수 있다는 것을 알 수 있었다

class Solution {
    public int solution(int[] numbers) {
        int check_save = 0;
        for(int i=0; i<numbers.length; i++){
            for(int j=0; j<numbers.length; j++){
                if(i!=j){
                    int check = numbers[i]*numbers[j];
                    if(check > check_save){
                    check_save = check;
                }
                }
            }
        }
        return check_save;
    }
}

 

그냥 Arrays.sort() 쓰면 된다