[algorithm] 가위 바위 보

Ho-eng·2023년 4월 17일
0

❓ 가위 바위 보


A, B 두 사람이 가위바위보 게임을 합니다. 총 N번의 게임을 하여 A가 이기면 A를 출력하고, B가 이기면 B를 출력합니다. 비길 경우에는 D를 출력합니다.
가위, 바위, 보의 정보는 1:가위, 2:바위, 3:보로 정하겠습니다.
예를 들어 N=5이면,

두 사람의 각 회의 가위, 바위, 보 정보가 주어지면 각 회를 누가 이겼는지 출력하는 프로그램을 작성하세요.

  • 입력설명

    첫 번째 줄에 게임 횟수인 자연수 N(1<=N<=100)이 주어집니다.
    두 번째 줄에는 A가 낸 가위, 바위, 보 정보가 N개 주어집니다.
    세 번째 줄에는 B가 낸 가위, 바위, 보 정보가 N개 주어집니다.
  • 출력설명

    각 줄에 각 회의 승자를 출력합니다. 비겼을 경우는 D를 출력합니다.
  • 입력예제 1

    2 3 3 1 3
    1 1 2 2 3
  • 출력예제 1

    A
    B
    A
    B
    D

❗ 문제 풀이

내 풀이

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(a, b) {
        let answer = []
        //가위 1
        //바위 2
        //보 3
        // 이길조건
        // 1.가위(1) === 보(3)
        // 2.바위(2) === 가위(1)
        // 3.보(3) === 바위(2)

        for (let i = 0; i < a.length; i++) {
          const win =
            (a[i] === 1 && b[i] === 3) ||
            (a[i] === 2 && b[i] === 1) ||
            (a[i] === 3 && b[i] === 2)
          const drow = a[i] === b[i]
          if (win) {
            answer.push("A")
            continue
          }
          if (drow) {
            answer.push("D")
            continue
          }
          answer.push("B")
        }

        return answer
      }
      let a = [2, 3, 3, 1, 3]
      let b = [1, 1, 2, 2, 3]
      console.log(solution(a, b))
    </script>
  </body>
</html>
  • 컨셉
    : a입장에서 이길조건 질조건 비길조건을 나누고, 그 조건에 대한 탐색을 한 후, 조건이 맞으면 answer라는 빈 배열에 하나하나 차곡차곡 담은 후, 리턴!

  • 코드리뷰
    a. 조건문의 참인 조건이 길어서 변수로 따로 뺌.
    b. for문으로 반복문을 돌리고, 그 안에 조건들을 ealry return으로 선언함. early return으로 선언할 떄,
    for + continue 조합으로 조건이 참인경우에도, 다음 인덱스로 넘어갈수 있도록 코드를 짬.


정답 소스

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(a, b){         
                let answer="";
                for(let i=0; i<a.length; i++){
                    if(a[i]===b[i]) answer+="D ";
                    else if(a[i]===1 && b[i]===3) answer+="A ";
                    else if(a[i]===2 && b[i]===1) answer+="A ";
                    else if(a[i]===3 && b[i]===2) answer+="A ";
                    else answer+="B ";
                }
                
                return answer;
            }

            let a=[2, 3, 3, 1, 3];
            let b=[1, 1, 2, 2, 3];
            console.log(solution(a, b));
        </script>
    </body>
</html>
  • 컨셉은 같다
  • if else문으로, 이길 조건과, 비길조건을 선언하였다.
profile
매일 '어제의 나와 오늘의 나는 무엇이 다를까?'를 고민하는 김호엥입니다.

0개의 댓글