ABOUT ME

개발에 대한 내용을 주로 기록하고, 그 외에 남기고 싶은 것들을 기록합니다.

Today
Yesterday
Total
  • [프로그래머스] 로또의 최고 순위와 최저 순위 - javascript
    기타/코딩테스트 2022. 6. 21. 00:45

     

     

     

    문제

     

    로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다.

    하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다.

    당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어졌습니다.

     

    당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

     

     

     

    나의 풀이

    function solution(_lottos, _winNums) {
        // 모르는 번호 개수
        let coverCnt = 0;
    
        _lottos.forEach((v, i) => {
            const winIdx = _winNums.findIndex((e) => e == v);
    
            if (winIdx > -1) _winNums.splice(winIdx, 1);
    
            if (v == 0) coverCnt++;
        });
    
        // 로또 개수
        const lottosCnt = 6;
        // 맞춘 개수(당첨 최저 개수)
        const lowCnt = lottosCnt - _winNums.length;
    
        // 최고 순위 번호
        // 맞춘 개수 + 0 개수
        let highCnt = lowCnt + coverCnt;
    
        const ranking = [6, 6, 5, 4, 3, 2, 1];
    
        return [ranking[highCnt], ranking[lowCnt]];
    }

    forEach 내 로직 설명

    맞춘 번호를 로또 당첨 번호에서 삭제해서 [로또 개수 - 당첨안된 번호 개수]로 맞춘 개수를 구했다

    맞춘 개수는 당첨 최저 개수와 똑같다.

     

    당첨 최고 개수는 [맞춘 개수 + 0의(맞출 가능성이 있는) 개수]로 구했다.

     

    --

    6개 당첨은 1등, 5개 당첨은 2등 ... 1개 또는 0개 당첨은 6등이라고 했을 때

    어떻게 표현해야할까 고민했다.

     

    '7-맞춘개수 = 등수' 를 할까, '6 - 맞춘개수 = 등수'로 해야할까 했는데

    두 방법 모두 1 또는 0인 경우는 결국 if문을 사용할 수 밖에 없었다.

     

    그래서 맞춘 개수와 등수를 어떻게하면 간결하게 표현할 수 있을까를 고민했고,

    0부터 시작하는 맞춘 개수를 index로 생각하고, 해당 개수에 따라 그에 맞는 등수를 값으로 두면 되겠다는 생각이 들었다.

     

     

     

    실행 테스트

    const lottos = [44, 1, 0, 0, 31, 25];
    const win_nums = [31, 10, 45, 1, 6, 19];
    
    console.log(solution(lottos, win_nums)); // output => [3, 5]

     

     

     

    회고

     

    코딩테스트를 하루하루 풀 때 마다 변수 쓰는 방식이 왔다갔다 한다.

    매개변수는 똑같은 방식으로 쓰지만, 함수 내 선언하는 변수 이름이나 for문의 value 변수 이름을 계속 바꾸게 된다.

     

    예를 들어 forEach의 value라고 하면

    해당 value의 내용인 lottoValue 라는 풀네임으로 썼다가, value로 했다가, v라는 완전 단축어로 했다가..

     

    처음에는 변수 이름을 보고 바로 알아볼 수 있어야 한다!라고 생각해서 풀네임을 쓰다가

    이렇게까지 길게 써야할까? 라는 생각을 해서 조금 줄여봤다가

    어차피 forEach의 첫번째 인자값은 value인거 개발자라면 알텐데, 굳이 길게 해야할까 싶어서 완전 단축어로 썼다가..

     

    아직은 코드 스타일을 찾아가는 과정인 것 같다.

    이 부분은 좋은 코드와 관련된 글을 읽다보면 잡혀가겠지..

    이러한 생각의 과정을 겪었다는 것을 잊지 않기 위해 적어본다

    댓글

Designed by Tistory.