내용 복습/알고리즘

프로그래머스 코딩테스트 입문 가위바위보

jskim4695 2024. 9. 5. 12:57
문제설명

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

 

보다시피 문자열을 다루는 문제이다. 내 풀이는 아래와 같다.

 

function solution(rsp) {
    var answer = [];
    rspArr = rsp.split('')
    for (let i = 0; i<rspArr.length; i++) {
        if (rspArr[i] === '2') {
            answer.push(0)
        } else if (rspArr[i] === '0') {
            answer.push(5)
        } else if (rspArr[i] === '5') {
            answer.push(2)
        }
    }
    return answer.join('');
}

 

별다른 기교없이 문제가 제시한 그대로 풀었다. split으로 쪼개고 join으로 다시 문자열로 바꿔주었고, 약간 실수했던 게, if의 조건을 짤 때, '2'같은 스트링이 아닌 숫자 2로 적었더니 답이 비워져서 나왔다. 문제를 똑바로 읽어야겠다는 생각을 했고, 다른 사람이 푼 풀이 중 좋아보이는 풀이를 2개 뽑아왔다. 

 

1. switch

function solution(rsp) {
    const rspStr = rsp.toString()
    let result = ''
    for(let i = 0; i < rspStr.length; i++) {
        switch(rspStr[i]) {
            case '0' :
                result += '5'
                break;
            case '2':
                result += '0'
                break;
            case '5':
                result += '2'
                break;
        }
    }
    return result;
}

 

평소 switch를 잘 활용하지 못했기에 처음 문제를 봤을 때 생각난 방식이 이것이다. 한번 활용해볼까 했지만 내가 풀 방식이 좀더 편해서 그냥 의식의 흐름대로 풀었던 것 같다.

 

2. 객체

function solution(rsp) {
    let arr = {
        2: 0,
        0: 5,
        5: 2
    };
    var answer = [...rsp].map(v => arr[v]).join("");
    return answer;
}

 

그리고 내가 포스팅하게 된 풀이인데, 객체를 이용해 신선한 풀이를 하셨다. 각 상황을 객체로 작성한 뒤, map 반복문을 돌려 리턴하는 방식이다. 확실히 간결하여 보기쉽고, 성능적인 면에서도 뛰어나 가져왔다.