개발자 도전기
[국비지원] 15일차 - 가위바위보 게임, 프로그래머스 본문
오늘 배운 조건문을 사용해서 컴퓨터와 하는 가위바위보 게임을 만들어보았습니다
가위 바위 보 순서대로 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 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() 쓰면 된다
'개발공부 > TIL' 카테고리의 다른 글
[국비지원] 17일차- 프로그래머스(배열 회전시키기) (2) | 2024.02.28 |
---|---|
[국비지원] 16일차 - 프로그래머스(대문자와 소문자) (0) | 2024.02.26 |
[국비지원] 14일차 - 연산자, 프로그래머스 (0) | 2024.02.22 |
[국비지원] 13일차 - 타입 변환 (0) | 2024.02.22 |
[국비지원] 12일차 - Primitive Type (0) | 2024.02.20 |