반응형
[문과 코린이의 IT 기록장] JS(Javascript) 프로그래머스(Programmers) 코딩 테스트 - 로또의 최고 순위와 최저 순위
[ 풀이 1 ]
- for문, if문 사용
function solution(lottos, win_nums) {
let gcnt = 0; // 나의 로또번호 = 실제 로또값인 개수
let ocnt = 0; // 나의 로또번호 = 0인 개수
const cnt = Array(2).fill(0); // 최종 배열 [최고등수, 최저등수]
for(let l=0; l<lottos.length; l++){ // 내가 가진 로또번호 회전
// 내 로또번호 = 0이라면, ocnt 1추가
if(lottos[l] == 0){
ocnt += 1; // const는 변수 재할당 불가능. let으로 선언해야 함.
continue;
}
for(let i=0; i<win_nums.length; i++){
if(lottos[l] == win_nums[i]){
gcnt++;
break;
}
}
}
cnt[0] = checkRanking(gcnt+ocnt);
cnt[1] = checkRanking(gcnt);
return cnt;
}
function checkRanking(checkCnt){
if(checkCnt === 6){ return 1; }
else if(checkCnt === 5){ return 2; }
else if(checkCnt === 4){ return 3; }
else if(checkCnt === 3){ return 4; }
else if(checkCnt === 2){ return 5; }
else{ return 6; }
}
[ 풀이 2 ]
- for문, case문 사용
function solution(lottos, win_nums) {
let gcnt = 0; // 나의 로또번호 = 실제 로또값인 개수
let ocnt = 0; // 나의 로또번호 = 0인 개수
const cnt = []; // 최종 배열 [최고등수, 최저등수]
for(let l=0; l<lottos.length; l++){ // 내가 가진 로또번호 회전
// 내 로또번호 = 0이라면, ocnt 1추가
if(lottos[l] == 0){
ocnt += 1; // const는 변수 재할당 불가능. let으로 선언해야 함.
continue;
}
for(let i=0; i<win_nums.length; i++){
if(lottos[l] == win_nums[i]){
gcnt++;
break;
}
}
}
console.log(gcnt+ocnt, gcnt)
switch(gcnt+ocnt){ // 최고 일치값
case 6:
cnt[0] = 1;
break; // switch case문에서는 break 무조건 써주기ㅠㅠ...
case 5:
cnt[0] = 2;
break;
case 4:
cnt[0] = 3;
break;
case 3:
cnt[0] = 4;
break;
case 2:
cnt[0] = 5;
break;
default:
cnt[0] = 6;
break;
}
switch(gcnt){ // 최저 일치값
case 6:
cnt[1] = 1;
break;
case 5:
cnt[1] = 2;
break;
case 4:
cnt[1] = 3;
break;
case 3:
cnt[1] = 4;
break;
case 2:
cnt[1] = 5;
break;
default:
cnt[1] = 6;
break;
}
return cnt;
}
[ 풀이 3 ]
- filter(), includes(), length 사용
- rank 배열로 정의하여 사용
function solution(lottos, win_nums) {
const rank = [6, 6, 5, 4, 3, 2, 1]; // 0개, 1개, 2개, 3개, 4개, 5개, 6개 맞춤 => 등수
// filter() : a => b , a중 b조건에 해당하는 것을 걸러라.
// includes() : 특정 문자열을 포함하는지를 확인하는 메서드 => 포함하면 true(1)반환, 포함하지 않으면 false(0)반환
// filter(v => true)이면 해당 v는 가져오고, filter(v => false)이면 해당 v는 걸러진다.
let minCount = lottos.filter(v=>win_nums.includes(v)).length;
// filter(v => v==0) : v값이 0인 것들만 가져와라
// filter(v => !v) : v값을 전환하여, false => true가 된 값들만 가져와라. (즉 0의 값만 가져올 수 있도록 한 것)
let zeroCount = lottos.filter(v=>v==0).length;
const maxCount = minCount + zeroCount;
return [rank[maxCount],rank[minCount]];
}
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |
반응형
'문과 코린이의, [알고리즘] 기록' 카테고리의 다른 글
[문과 코린이의 IT 기록장] JS(Javascript) 프로그래머스(Programmers) 코딩 테스트 - 신고 결과 받기 (0) | 2022.06.09 |
---|---|
[문과 코린이의 IT 기록장] C++ 알고리즘 - 동적 계획법(Dynamic Programming) (2) | 2021.07.17 |