[Javascript] LV.0 가위 바위 보

은비·2023년 8월 23일
3

Programmers_CodingTest

목록 보기
28/72
post-thumbnail

문제 설명

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


제한사항

  • 0 < rsp의 길이 ≤ 100
  • rsp와 길이가 같은 문자열을 return 합니다.
  • rsp는 숫자 0, 2, 5로 이루어져 있습니다.

입출력 예

rspresult
"2""0"
"205""052"

입출력 예 설명

입출력 예 #1

  • "2"는 가위이므로 바위를 나타내는 "0"을 return 합니다.

입출력 예 #2

  • "205"는 순서대로 가위, 바위, 보이고 이를 모두 이기려면 바위, 보, 가위를 순서대로 내야하므로 “052”를 return합니다.

✍ SOLUTION1

const solution = (rsp) => Array.from(rsp).map(x=>x==="2"?"0":x==="0");

/* 
내가 처음 작성한 코드이다.
문자열 rsp를 입력 받아 각 문자를 순회하며 가위(2), 바위(0), 보(5)를 이기는 값을 반환하는 로직을 
구현했다.

1. Array.from(rsp) : 입력받은 문자열 rsp를 배열로 변환한다.
예를 들어, "205"라는 문자열이 주어지면 ['2', '0', '5']라는 배열을 생성한다.

2. .map(x => x === "2" ? "0" : x === "0" ? "5" : "2")
map 함수는 배열의 모든 요소에 대해 제공된 함수를 호출하고, 그 결과로 새 배열을 생성한다.
만약 현재 요소(x)가 "2"(가위)라면, 이것을 이기는 값인 "0"(바위)으로 변경해준다.
만약 현재 요소(x)가 "0"(바위)라면, 이것을 이기는 값인 "5"(보)으로 변경해준다.
만약 현재 요소(x)가 위의 두 경우에 해당하지 않으면 (즉, 보인 경우), 
이것을 이기는 값인 “2”(가위)로 변경한다.
최종적으로 map 함수의 결과값은 가위 바위 보 게임에서 승리하는 값을 나타내는 새로운 배열이 된다.
*/

✍ SOLUTION2

const solution = (rsp) => 
rsp.split("").map(x=>x==="2"?"0":x==="0"?"5":"2").join("");

/* SOLUTION1과 비슷한 코드이다. Array.from으로 rsp의 문자열을 배열로 만들어 주었다면
SOLUTION2에서는 split을 통해 배열로 만들어 주었다. 두가지 방법 모두 사용할 수 있다.*/

✍ SOLUTION3

/*
 가위는 2 바위는 0 보는 5
*/
function solution(rsp) {
    let arr = {
        2: 0,
        0: 5,
        5: 2
    };
    var answer = [...rsp].map(v => arr[v]).join("");
    return answer;
}

/* 
다른 분이 풀이를 보다가 객체를 이용하여 사용하는 방법도 좋은거같아서 작성해보았다.

1. 이 함수는 주어진 가위 바위 보 게임에서 항상 승리할 수 있는 패턴의 문자열을 반환해준다.
2. answer 변수에 스프레드 문법으로 [...rsp]를 해주어 문자열을 배열로 변환한다.
3. .map(v => arr[v]): map 함수를 사용하여 배열의 각 요소에 대해 함수를 실행하고 결과값으로 
새 배열을 생성한다. 여기서 함수 v => arr[v]는 현재 요소 v(가위, 바위, 보 중 하나)에 해당하는 
승리하는 값을 찾아 반환한다.
4. .join(""): map 함수의 결과로 나온 배열을 다시 문자열로 변환한다.
 */

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

2개의 댓글

comment-user-thumbnail
2023년 8월 23일

코테 연습 파이팅입니다 :)

1개의 답글