출처 - https://school.programmers.co.kr/learn/courses/30/lessons/181916
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
풀이
function solution(a, b, c, d) {
const nums = [a, b, c, d];
const appear = {}
//객체에 각 요소가 몇번이나 들어가있는지 함수를 짬
for(let i =0;i<4;i++){
const num = nums[i];
appear[num] = (appear[num] || 0) + 1;
}
//객체 중 밸류가 가장 높은수를 count로 지정
const count = Math.max(...Object.values(appear));
//밸류의 값에 따라 정렬
const entries = Object.entries(appear).sort((a,b)=>a[1] - b[1])
let answer = 0;
switch(count){
case 4:
answer = 1111 * a;
break;
case 3:
answer = (10 * Number(entries[1][0]) + Number(entries[0][0])) ** 2
break;
case 2:
//둘다 두개의 페어가 맞춰진 경우 (ex : 1,1 / 2,2 일경우 length = 2 )
if(entries.length === 2){
answer = (Number(entries[1][0]) + Number(entries[0][0])) * Math.abs(Number(entries[1][0]) - Number(entries[0][0]))
}
//2개만 서로 갖고 나머지는 다 다른 경우
if(entries.length === 3){
//밸류가 1인것만 찾아 newEntries로 할당
const newEntries = entries.filter((el)=> el[1]===1)
answer = Number(newEntries[1][0]) * Number(newEntries[0][0])
}
break;
//밸류가 1씩이라면 다 다른수이므로 제일 작은 수 반환
case 1:
answer = Math.min(...nums);
break;
}
return answer;
}
이런식의 문제를 저번에 한번 풀었었던것같은데 객체는 여전히 헷갈린다...
우선 배열의 어떤요소가 몇개 들어있는지를 객체에 저장해준다.
그렇게하면 객체엔 { '2' : 4 ... }형식으로 저장 될 것이다 .
이 객체를 Object.entries(객체) 를 사용하면 객체를 배열로 [ '2' , 4 ]형식으로 전환되어 나타날것이다.
그렇게해서 switch문을 이용해 밸류가 4라면 4개가 모두 경우 일때의 값을 반환 , 3개라면 3개일 경우의 값을 반환하고
2개일경우에는 두가지의 경우가있는데 만약 2개가 두쌍으로 같이 떨어진다면 entries의 길이는 2일것이다. (요소가 두개이기때문)
요소의 길이가 3이라면 두개가 맞아떨어지는값과 그 나머지의 값이 서로다르다는 뜻이므로 따로 처리를 해준다.
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 LV.1 - 모의고사(JS) (1) | 2024.06.13 |
---|---|
[알고리즘]프로그래머스LV.1 - 비밀지도 (0) | 2024.06.11 |
[BOJ] 2581번 - 소수(JS) (0) | 2024.05.28 |
[BOJ]2292번 - 벌집(JS) (0) | 2024.05.26 |
[알고리즘] 프로그래머스 LV.0 - 조건에 맞게 수열변환2 (0) | 2024.05.26 |