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개지...
생각날 때까지 기다리자... 이렇게 포스팅도 미완성이다ㅋ
정답이면서 주석으로 어떻게 하겠다는 생각을 분명히 했다고 보이는 코드
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
'알고리즘, 자료구조 > 프로그래머스' 카테고리의 다른 글
프로그래머스/예산/javascript (0) | 2021.06.29 |
---|---|
프로그래머스/음양 더하기/javascript (0) | 2021.06.27 |
[프로그래머스/javascript] k번째수 (0) | 2021.06.14 |
[프로그래머스/javascript/카카오 인턴] 키패드 누르기 (0) | 2021.05.06 |
[프로그래머스/javascript] 문자열 내 p와 y의 개수 (0) | 2021.04.07 |