본문 바로가기
algorithm/Programmers

[JAVA] 가위 바위 보

by 이쟝 2023. 1. 18.

1-1. 내가 푼 풀이

class Solution {
    public String solution(String rsp) {
        StringBuilder sb = new StringBuilder();
        for(char c: rsp.toCharArray()) {
            if(c == (char)(2+'0')) sb.append('0');
            if(c == (char)(0+'0')) sb.append('5');
            if(c == (char)(5+'0')) sb.append('2');
        } 
        return sb.toString();
    }
}

1-2. 삼항연산자 이용

- 삼항연산자 할 수 있으면 삼항연산자 생각하기!!!!

class Solution {
    public String solution(String rsp) {
        StringBuilder sb = new StringBuilder();
        for(char c: rsp.toCharArray()) {
            sb.append(c == '2' ? 0 : c == '0' ? 5 : 2);
        } 
        return sb.toString();
    }
}

2. char형이 아닌 int 형으로 foreach

char형이 아니라 int형으로 변환해서 - '0' 아니면 - 48 으로

class Solution {
    public String solution(String rsp) {
        String answer = "";
        for(int i: rsp.toCharArray()) {
            if(i-'0' == 2) answer += 0;
            else if(i-48 == 0) answer += 5;
            else answer += 2;
        } 
        return answer;
    }
}

3. HashMap 사용

- str.substring(startidx, endidx), map은 key로 value를 가져올 수 있다.

import java.util.HashMap;

class Solution {
    public String solution(String rsp) {
        HashMap<String, String> winNum = new HashMap<>();
        winNum.put("2", "0");
        winNum.put("0", "5");
        winNum.put("5", "2");
        StringBuilder sb = new StringBuilder();
    
        for(int i=0;i<rsp.length();i++) {
            sb.append(winNum.get(rsp.substring(i, i+1)));
        }
        return sb.toString();
    }
}

4. 객체 구조화

class Solution {
    public String solution(String rsp) {
        String answer= "";
        String[] splited = rsp.split(""); // ["2", "0", "5"]
        
        for(String s : splited) {
            answer += cal(s);
        }
        return answer;
    }
    
    private String cal(String str) {
        String result = "";
        switch(str) {
            case "2" : result = "0"; break;
            case "0" : result = "5"; break;
            case "5" : result = "2"; break;
        }
        return result;
    }
}

 

  • if else if 문, 객체 구조로 하면 조금더 시간이 걸리긴 한다. 
  • 역시 HashMap이 빠르긴 하다. 
  • charAt이나, for문으로 String을 char형으로 바꾸는 것만 생각했는데 
  • split으로 문자열을 잘라서 String 배열로 만들 수 있다는 것을 알게 되었다.