본문 바로가기
알고리즘/Java 코딩 테스트 준비

[Java] 가위바위보 문제

by Dev dreamer 2023. 2. 1.

💡 문제

 

두사람이 가위바위보를 총 n 번 진행

a 가 이기면 a를 출력하고 b가 이기면 b를 출력한다.

비길경우 d를 출력한다. 

1은 가위 2는 바위 3은 보 를 의미한다.

 

입력 

 

첫번째 줄 입력 : 자연수 n (가위바위보 횟수)

두번째 줄 입력 : a가 낼 자연수 1,2,3 을 n개 입력

세번째 줄 입력 : b가 낼 자연수 1,2,3 을 n개 입력

 

입력 예시

5

2 3 3 1 3

1 1 2 2 3

 

출력 예시

A

B

A

B

D

 

 

💡 1. 내 풀이 과정


항상 기억하자. 문자열을 내부 데이터 값을 비교할 땐 equlas!!

그전에도 이걸로 해멨던 적이 있으면서 똑같이 한시간 넘게 이러고 있다.

 

풀이는 간단하니까 간단하게 정리만 해보겠다.

 

일단 처음 몇번의 가위바위보를 할 지 정하는 숫자와

각 a, b 가 냈던 가위바위보 정보를 받아야 한다.

 

그래서 입력을 총 3번 받았으며 각 배열을 선언해서 받고 solution으로 보내줬다.

arr 와 arr 2 값을 받은 solution 에서는

일단 두 사람이 낸 정보가 같은경우는 d가 출력이 되므로 먼저 처리해주고

그후에 a가 냈을때 기준으로 b의 낸 결과에 따라 누가 이겼는 지 정보를 담아주면 된다.

 

🔍 기억하자 String의 동일성을 따질 때에는 equals!!!!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	public String[] solution(String arr[], String arr2[]) {
		String[] answer= new String[arr.length];
		
		for(int i =0; i<arr.length; i++) {
			System.out.println("뭐들어옴?" +arr[i] +arr2[i]);
			System.out.println(arr[i].equals(arr2[i]));
			if(arr[i].equals(arr2[i])) {
				answer[i]="D";
			}else if(arr[i].equals("1")) {
				if(arr2[i].equals("2")) {
					answer[i]="B";
				}else {
					answer[i]="A";
				}	
			}else if(arr[i].equals("2")) {
				if(arr2[i].equals("3")) {
					answer[i]="B";
				}else {
					answer[i]="A";
				}
			
			}else if(arr[i].equals("3")){
				if(arr2[i].equals("1")) {
					answer[i]="B";
				}else {
					answer[i]="A";
				}
			}
		}
		return answer;
	}
	public static void main(String[] args) throws NumberFormatException, IOException {
		Main T = new Main();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringTokenizer st2 = new StringTokenizer(br.readLine());
		String[] arr = new String[num];
		String[] arr2 = new String[num];
		
		for(int i =0; i<num; i++) {
			arr[i]=st.nextToken();
			arr2[i]=st2.nextToken();
		}
		
		for(String x : T.solution(arr, arr2)) {
			System.out.println(x);
		
		}
	}
}

 

 

💡 2. 강사님 풀이


강사님 풀이 같은 경우는 애초에 String 으로 비교 하지 않고 int 값 자체로 받아서(Scanner로)

== 으로 비교해도 됐다.

 

또 비교할때 비기는 경우를 제외해주고 a가 이기는 경우만 먼저 제외해주고 나머지는 b가 이기니까

위에 처럼 정리하는게 훨씬 생각하기 깔끔 할 수도 있을것 같다.

 

answer 값은 String 에 이어 붙이는 형태로 answer 을 return 받고

출력 부분에서 T.solution 에 toCharArray 를 통해 배열에 담은것을 for each 로 한줄씩 출력해준다.

 

 

코테 관련해서 많이 부담스러웠는데 강의를 통해 푸는 방법들을 배우니 이 시간이 즐겁습니다.

진짜 기능하나하나 다양한 방법으로 잘 가르쳐주십니다.

출처 : 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 대시보드 - 인프런 | 강의 (inflearn.com)

댓글