코딩테스트

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

GABOJOK 2023. 9. 21. 18:00

 

단순히 문자열을 받으면, 그 문자열 안에 내용을 해당하는 다른 값으로 바꿔 주면 되는거였다. 

 

 

방법1. 

function solution(rsp){
    let a = '';
    [...rsp].map((e)=>{
        a+= e==='2' ?e ='0' : e==='0' ? e='5' : e='2';
    }).join('')
    return a
}

 

일단 문자열 rsp를 spread operator를 이용해 풀어서 배열에 담아주고, map을 이용해 반복을 시켰다. 

 

그리고서는 빈 문자열로 선언했던 변수 a에 값을 넣어주려 했다. 

 

[...rsp]의 요소 하나하나가 2인 경우에는 0을, 0인 경우에는 5를, 5인 경우에는 2를 넣어주려 했다. 

여기서 주의할 점은 지금 [...rsp]의 요소 하나하나는 문자열인 상태이다. 

그러니까 [...rsp]를 찍어보면 (3) ['2', '0', '5'] 이 상태 라는 말이다. 

 

그래서 애초에 비교도 문자열로 해야 했다. 

 

추가로 값을 바꿔줄 때에 해당 요소를 어떤 타입으로 넣어주던  상관은 없다. 

자바스크립트 에서는 문자열과 숫자를 함께 사용할 때에 자동으로 형변환이 되는 특징이 있기 때문이다. 

그렇지만 문자열 타입으로 넣어주면 혹시 모를 오류를 방지할 수 있겟다 

변수는 문자열 타입으로 지정했음으로. 

 

그치만 비교하는 요소는 문자열로 비교해 주어야 한다. 

왜냐하면 === 이기 때문.

== 는 타입까지 비교하지 않지만, 

===는 타입까지 비교함.

 

 

 

 

 

방법2

function solution(rsp){
    let a = '';
    [...rsp].map((e)=>{
        e === '2' ? a += '0' : e === '0' ? a += '5' : a += '2';
    });
    return a
}

 

아까의 방법 1과 비슷한데, 삼항연산자에서 계산이 끝난 뒤에 a에 할당해주는 것이 아닌, 

a에 직접 할당 하는 방법이다. 

 

 

 

 

방법3

function solution(rsp){

    let arr = {
        2 : 0,
        0 : 5,
        5 : 2
    };
    return  [...rsp].map((e)=> arr[e]).join('')
}

충격적인 방법...ㅎㅎㅎ 이렇게나 간단하게??

값에 따라 바꿔줄 값이 지정되어 있으니, 

이를 obj 형식으로 만들어서, 그 키에 따른 값을 가져오는 것. 

 

OMG👍

 

그리고는 spread operator 한 rsp 배열에 map 반복문을 돌리는데,

그 반복문에 요소를 키로 가지고 있는 arr의 값을 가져와서 문자열로 합쳐줌. 

 

자꾸 map 반복문을 단순한 반복문으로 생각하게 된다. 

잊지 말자. 

 

map() 메서드는 배열 내의 모든 요소 각각에 대하여

주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.

 

 

 

 

 

 

방법4

function solution(rsp){
    return rsp.split("").map((v) => v==="2" ? 0 : v==="0" ? 5 : 2).join("")
}

잊고 있던  split()

괄호 안의 기준으로 나눠서 배열로 반환한다. 

이 경우에는 ['2', '0', '5']가 나오겠다. 

이 배열을 기준으로 map 반복문을 통해 새로운 배열을 반환할껀데,

이 map 반복문 안에 삼항연산자를 넣어주었다. 그리고 그것을 join("")

 

 

 

방법5  

function solution(rsp){
    return rsp.split('').reduce((arr,v)=> {
        if(v==='2') arr.push(0);
        else if(v === '0') arr.push(5);
        else arr.push(2);
        return arr;
    },[]).join("");
}

reduce를 사용하는게 익숙하지 않아서 살펴보았다. 

누산값의 이름을 arr로 붙여준 다음, 누산값의 초깃값으로 []를 설정. 이를 이용해 담아주었다. 

 

 

 

 

추가로 

자바스크립트 에서는 문자열과 숫자를 함께 사용할 때에 자동으로 형변환이 되는 특징이 있기 때문이다. 

라고 했는데, 그냥 진짜로 되나 하나하나 해봤다... 

 

 

1) 변수 a에  e를 변경해서 그 결과를 할당한다.

 

1-1) 바꿀 값을 문자 타입으로 넣어준다.  

a+= e==='2' ?e ='0' : e==='0' ? e='5' : e='2';    //작동한다

1-1) 바꿀 값을 숫자 타입으로 넣어준다.  

a+= e==='2' ?e =0 : e==='0' ? e=5 : e=2;       //작동한다

 

2) 변수 a에 직접 값을 할당한다.

 

2-1) 바꿀 값을 문자 타입으로 넣어준다.  

e === '2' ? a += '0' : e === '0' ? a += '5' : a += '2';       //작동한다

 

2-2) 바꿀 값을 숫자 타입으로 넣어준다. 

e === '2' ? a += 0 : e === '0' ? a += 5 : a += 2;       //작동한다.

 

 

ㅋㅋㅋㅋ 다 됨..