알고리즘, 자료구조/프로그래머스

프로그래머스/로또의 최고 순위와 최저 순위/javascript

soohkang 2021. 6. 26. 17:59
728x90

어떻게 풀어야 할지 생각하는 순서를 다듬기 위해 노력한 문제라서 기록에 남겨본다.

 

정답도 아니고 논리에 구멍이 숭숭 난 나의 처음 코드

function solution(lottos, win_nums) {
    var answer = [];

    // 찍은 번호와 당첨 번호를 비교한다
    // 같으면 카운트 1, 다르면서 0이면 카운트 1 => 최고 순위
    // 같으면 카운트 1, 다르면서 0이 아니면 패쓰 => 최저 순위
    
    let count = 0;
    lottos.forEach( element => {
        
        if(win_nums.indexOf(element) !== -1) {
            count++;
        }
        else if (win_nums.indexOf(element) === -1 && element === 0) {
            count++;
        }
        
    });
    
    if(count) {
        answer.push(count);
    }
    return answer;
}

 

나의 문제점 나열

1. 비교를 어떻게 할 건지 제시 못함. for 문을 쓸 건지 forEach를 쓸 건지 아니면 다른 방식 아는 걸 적용할지 작성하지 못함.

머리에 어떻게 하겠다는 개념이 잡혀있지 않아서 그런 것으로 보임. 주석은 작성했는데 어떻게 하지라는 게 없으니까 고민하다가 시간 보냄.

이럴 땐 이거를 써야 된다라는 감이 아직 없음. 이 부분을 훈련해야겠다.

 

아래 정답 주석을 보면 비교를 위해 반복문을 돌리겠다고 명시하고 있음. 반복문을 통해서 비교를 하겠다는 솔루션이 있는 것임.

 

 

2. 같으면 카운트 1, 다르면서 0이면 카운트 1 => 최고 순위

같으면 카운트 1, 다르면서 0이 아니면 패쓰 => 최저 순위

총체적 난국, 아는 게 if 밖에 없음. 일단... 선칭찬하자면 어쨌든 count 변수에 카운트할 생각을 했다는 것에 점수를 주고 싶고

... 이게 끝.

 

그럼 여기서 어떻게 생각을 개선하지?

정답 주석을 역추적해보자.

 

문제에서 answer의 첫 번째 답은 최고 순위고 두 번째 답은 최저 순위라고 말함. 이걸 이용해서 인덱스로 사용한 듯하다.

대단하다...

 

다음으로 rank 배열에 순위를 미리 넣어놓고,,, 근데 왜 숫자가 7개지...

 

생각날 때까지 기다리자... 이렇게 포스팅도 미완성이다ㅋ

 

 

정답이면서 주석으로 어떻게 하겠다는 생각을 분명히 했다고 보이는 코드

출처 : https://velog.io/@hadam/JS-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%A1%9C%EB%98%90%EC%9D%98-%EC%B5%9C%EA%B3%A0-%EC%88%9C%EC%9C%84%EC%99%80-%EC%B5%9C%EC%A0%80-%EC%88%9C%EC%9C%84

function solution(lottos, win_nums) {
    var answer = [];
    /*
    1. 반복문 돌리면서 win nums에 민우의 로또 번호가 있는지 확인
    2. 존재하면 count를 증가
    3. result의 0번은 6 - (count + 0) 개의 갯수 + 1 
    4. result의 1번은 6 - count 개의 갯수 + 1
    */
    let count = 0;
    lottos.forEach( element => {
        const index = win_nums.indexOf(element);
        if( index !== -1 ) {
            count++;
            win_nums.splice(index, 1);
        }
    });
    
    const rank = [6, 6, 5, 4, 3, 2, 1];
    const zeroCount = lottos.filter( element => element === 0 ).length;
    return [rank[count + zeroCount], rank[count]];
}

 

 

 

 

출처:

https://programmers.co.kr/learn/courses/30/lessons/77484?language=javascript#fnref1 

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr