ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] Today I Learned : 수학표현식, 논리연산자, 가위 바위 보 게임 함수 만들기(rockPaperScissors 함수)
    프론트엔드 개발자가 될거야./js 2022. 6. 23. 15:25

    공부하다가 헷갈리는 개념들이 있어서 정리해보려고 한다.

    간단하지만 헷갈리는......

    컴퓨터 언어에서 사용되는 수학 표현식

    let num = 1;
    num++;
    
    console.log(num); // 2

    num++는 풀어서 쓰면

    num = num + 1; 이다.


    let num = 1;
    let newNum = num++;
    
    console.log(num); // 2
    console.log(newNum); // 1

    잠시 여기서 의문!

    num도 2고 newNum도 2 일 줄 알았는데.....

     

    왜 저런 답이 나왔을까?

    let newNum = num++;을 풀어서 써보면

    let newNum = num = num + 1 이다.

     

     newNum = num ---> newNum = 1 이고

    그 다음에 num + 1 을 해주어서 num은 2가 된 것이다.


    논리연산자

    또는에 해당하는 논리연산자 ||

    그리고에 해당하는 논리연산자 &&

     

    헷갈릴 수 있는 예시를 가져왔다.

    if (age > 65 || age < 21 && res === "한국")

    컴퓨터 언어는 왼쪽부터 해석하기 때문에 왼쪽부터 해석해야한다.

    즉, 위의 예시는  || 기준으로 나누어서 해석해야한다.

    '65가 넘거나 / 21보다 어리고 한국에 산다. ' 이렇게! 

    이런 해석이라면 아래와 같은 경우 참이다. (예)

    • 66세이다.
    • 20이면서 한국에 산다

    '65가 넘거나 21보다 아래이고 / 한국에 산다.' 이렇게 해석하면 안된다!

    이런 해석이라면 아래와 같은 경우 참이다.(예)

    • 66세 한국에 산다.
    • 20세 한국에 산다.

    코드를 가독성 있게 바꾼다면

    if (age > 65 || (age < 21 && res === "한국"))

    이렇게 해주어야 한다.

     

    👀 문제 👀

    가위 바위 보 게임 함수를 아래 조건에 맞게 구현해주세요.

    - rockPaperScissors 함수를 구현해서 가위 바위 보 게임을 구현해주세요.
    - 가능하면 || 와 && 연산자 둘다 사용해주세요.
    - player1과 player2 중 이긴 사람이 누군지 리턴해주세요.
    - 예를 들어, player1이 이겼으면 "player1" 이 리턴 되고
       그 반대의 경우라면 "player2"가 리턴이 되어야 합니다.
    - 만일 비기는 경우에는 무조건 "player1"이 리턴 되어야 합니다.
    - player1 과 player2 의 값은 다음 셋 중 하나 입니다.
      "가위" "바위" "보"
    - 예를 들어, player1은 "가위" 이고 player2는 "보" 이면
      "player1" 이 리턴 되어야 합니다.

    처음에 문제 자체를 이해못했다..😂

    그러니까 

    player1과 player2 중 이긴 사람이 누군지 리턴해줘야하는데

    player1이 이겼으면 "player1" 이 리턴,

    player2가 이겼으면 "player2" 이 리턴,

    player1 과 player2가 비겼으면 "player1"이 리턴

    즉,

    console.log(rockPaperScissors("가위", "보")); //player1
    console.log(rockPaperScissors("가위", "바위")); //player2
    console.log(rockPaperScissors("가위", "가위")); //player1

    이렇게 이해하고 문제를 풀면 된다.

     

    💖 정답 💖

    function rockPaperScissors(player1, player2) {
      if (
        // 무승부일 때 -> 리턴 player1
        (player1 === "가위" && player2 === "가위") ||
        (player1 === "바위" && player2 === "바위") ||
        (player1 === "보" && player2 === "보")
      ) {
        return "player1"; 
      } else if (
        // player1이 이겼을 때 -> 리턴 player1
        (player1 === "가위" && player2 === "보") ||
        (player1 === "바위" && player2 === "가위") ||
        (player1 === "보" && player2 === "바위")
      ) {
        return "player1";
      } else if ( 
        // player2가 이겼을 때 -> 리턴 player2
        (player1 === "가위" && player2 === "바위") ||
        (player1 === "바위" && player2 === "보") ||
        (player1 === "보" && player2 === "가위")
      ) {
        return "player2"
      }
    }
    console.log(rockPaperScissors("가위", "보")); //player1
    console.log(rockPaperScissors("가위", "바위")); //player2
    console.log(rockPaperScissors("가위", "가위")); //player1

     

    와앙.. 머리 터져어 🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯

    댓글

Designed by Tistory.