반응형
프로그래머스 2021 Dev-Matching 문제
레벨: 1
언어: JavaScript
[문제풀러가기] (https://programmers.co.kr/learn/courses/30/lessons/77484)
간단한 문제 설명
6자리 로또 번호와 그리고 몇 자리가 지워진 6자리 번호가 있다.
지워진 번호를 임의로 채워서 최고로 받을 수 있는 순위와 최저로 받을 수 있는 순위 구하기
자세한 설명은 위 링크 참고!
입력값
- lottos: 0이상 45이하의 원소를 가지는 길이 6의 정수 배열, 지워진 값은 0으로 들어옴
- win_nums: 1이상 45이하의 원소를 가지는 길이 6의 정수 배열출력값
- 최고순위와 최저순위 순으로 정수가 저장된 배열
📑풀이과정
일단 lottos
와 win_nums
의 같은 값의 개수가 몇 개인지 찾는다. 찾은 수는 지워진 부분이 모두 틀렸을 때와 같으니 최저 순위를 판별할 수 있고 지워진 부분이 모두 맞은 때가 최고 순위이니 지워진 부분(숫자 0)의 개수를 더하면 최고 순위가 된다.
즉
- 최저순위: 두 배열의 같은 숫자 개수
- 최고순위: 두 배열의 같은 숫자 개수 + 0의 개수
📋풀이코드
function solution(lottos, win_nums) {
const answer = [];
let win_counter = 0;
let zero_counter = 0
const win_ranking= [6,6,5,4,3,2,1]
lottos.map((num)=>{
if(num===0){
zero_counter++
}else{
win_nums.map((win_num)=>{
if(num===win_num){
win_counter++
}
})
}
})
answer[0] = win_ranking[win_counter + zero_counter]
answer[1] = win_ranking[win_counter]
return answer;
}
💻 코드 라인별 풀이
간단한 변수 선언부분은 패스한다.
const win_ranking= [6,6,5,4,3,2,1]
계산하여 나온 수를 로또의 순위로 바꾸기 위한 배열
lottos.map((num)=>{
if(num===0){
zero_counter++
}else{
win_nums.map((win_num)=>{
if(num===win_num){
win_counter++
}
})
}
})
map 함수를 사용하여 0이면 zero_counter에 +1하고 아니면 win_nums에서 찾은 숫자가 있는지 확인하여 win_counter +1한다.
👍다른 사람 풀이
function solution(lottos, win_nums) {
const rank = [6, 6, 5, 4, 3, 2, 1];
let minCount = lottos.filter(v => win_nums.includes(v)).length;
let zeroCount = lottos.filter(v => !v).length;
const maxCount = minCount + zeroCount;
return [rank[maxCount], rank[minCount]];
}
filter를 사용하여 보기 좋고 깔끔하게 구현되어 있길래 가져왔다.
이분의 코드를 맵을 2중으로 사용한 부분을includes
를 사용하면 더 깔끔하게 코드를 작성할 수 있겠다는 생각이 들었다.
반응형
'지난 글 모음' 카테고리의 다른 글
[프로그래머] - lv2 문자열 압축 JavaScript (0) | 2022.01.24 |
---|---|
[프로그래머스] - LV1 모의고사 JavaScript (1) | 2022.01.22 |
[프로그래머스] - LV1 신고 결과 받기 JavaScript (0) | 2022.01.22 |
스프링 핵심 원리 - 기본편 3 좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2021.05.14 |
스프링 핵심 원리 - 기본편 2 좋은 객체 지향 프로그램밍이란? (0) | 2021.05.12 |