180802 TIL 숫자 야구 구현

» 1막, TIL (Today I Learned)

숫자야구 구현

  • 오늘은 꼭 마스터즈 레벨2 과제인 숫자 야구를 뿌시겠다는 일념으로 집을 나섰다. (feat.공대친구)
  • 과제: https://github.com/code-squad/test-item-pool/blob/master/level2-common/level2.md
  • 디테일은 일단 생략하고 프로그램 구현부터 성공해보기로!
  • 순서: 1) 1~9까지 중 겹치지 않는 random 수 3개 뽑고 2) 1~9까지 겹치지 않는 수 3개 입력받고 3) 입력 = random (스트라이크, 볼) 확인하고 4) 3 스트라이크일때까지 2~3번 반복 5) 3 스트라이크 되면 끝

TIL 1 : array내 shuffle

 function shuffle(arr) {
        var j, x, i;
        for (i = arr.length; i; i -= 1) {  // i = 0 이 굳이 아닌 이유는 어차피 나중에 0이 되니까. 
            j = Math.floor(Math.random() * i); // 랜덤한 값을 하나 뽑고
            x = arr[i - 1]; //배열의 가장 마지막 인덱스 위치
            arr[i - 1] = arr[j]; // 배열의 가장 마지막 인덱스 위치에 [j] 값 넣기
            arr[j] = x; //인덱스[j]에 기존 x값 넣기
        }
    }
예) 
길이가 3인 배열에 2,4,6 이라는 숫자가 들어있고 arr = [2,4,6]
j에는 0부터 2까지 숫자중 1이 뽑혔다고 치면, j = 1
x = arr[2] <- (6)
arr[2]= arr[1] <- (4)
--> arr = [2,4,4]
arr[1] = x
--> arr = [2,6,4]
  • 이게 swap 개념이라고 한다고 한다. 컴퓨터에서 x = y 를 바로 바꿀 수 없기 때문에 (기존 x값이 사라지므로), 가상의 (temp)에 x 값을 넣어주어야 한다는 것!

  • Math.floor(Math.random() * i) random 함수는 0부터 1 사이의 실수를 뽑을 수 있다. 여기에 배열 길이를 곱하여 앞자리를 1이상으로 만들어 준 후, 실수이므로 Math.floor (=버림)로 소숫점 이하를 버려준다. 예: 0.12~~~ -> 곱하기 3하면 3.12~~~~ –> floor 하면 3

TIL 2 : 연속되는 숫자 입력받은 후 array에 각각 넣어주기

  • 맨 처음엔 alert를 세 번 띄워서 각각 수를 입력받으려고 했는데, 한번에 입력받는 것이 좋을 것 같아서 ‘각기 다른 수를 연속되게 입력’받도록 하였다. (예: 123)
  • 구글링 해보니 input.split(‘’) 이렇게 하면 각각의 원소로 배열에 넣을 수 있다고 하여 넣었는데, 넣고보니 String으로 들어가있더라.
  • 찾아보니 input.split(‘’).map(Number) <- 요렇게 해주면 str->number 로 변환가능하다고 하여 사용함

TIL 3 : 스트라이크 & 볼 찾기

       var strike = 0;
        var ball = 0;
        for (var i = 0; i < 3; i++) {
            if (value[i] === extract[i]) {
                strike++;
            } else {
                if (value.includes(extract[i])) {
                    ball++;
                }
            }
        }
        console.log(strike + '스트라이크  ' + ball + '');
    }
    document.write('축하합니다! 3 스트라이크!!')
  • 짜기 가장 힘들었던 알고리즘인데 일단 indent가 3번이나 들어가있어서 함수로 수정하는 방법을 찾아봐야한다.

오늘의 깨달음: 안되는 게 당연하다고 생각하고 끝까지 포기하지 않는 습관을 들이자! 공대생 마인드!!

다짐: 나만 생각하고 공부하기. 비교하는 순간 재앙.

칭찬: 어제까지만 해도 2차원 배열도 이해 못해서 버벅거렸는데, 이렇게 일단 돌아가는 프로그램을 구현했다는 게 자랑스럽다! (물론 4시간 넘게 걸리긴 했지만..) 확실히 옆에서 이런 식으로 찾아봐 라고 조언해주니까 진행이 잘되고 포기하지 않게된다. 공대친구 짱짱맨. 하지만 그는 나에게 ‘나약하다’고 꾸짖었다.

반성: 나약해지지 말자! 안되는 게 당연한 것(?)

TO DO: 1) 함수로 고치기 2) 전역변수 안쓰기 <- 근데 이건 못할 것 같음…ㅠㅠ

#끝!