
공통된 문제 하나씩 풀어와서 서로 설명해주는 오프라인 스터디
문제 풀이 의식의 흐름
배열에서 공통된 요소가 가장 많은 요소를 나타내야한다
각 요소의 갯수가 똑같을 시에는 -1을 리턴해야하는 약간 까다로운 문제
- 배열에서 각 요소의 갯수를 세주고
- 갯수들 중 최대값을 뽑아야한다
- 최대값이 같은 것이 2이상 나오면 -1을 리턴한다
- 그렇지 않다면, 최대값에 해당하는 요소를 나타낸다
생각은 했지만 구현은 어려워 풀지 못하고, 동료들의 풀이를 들어봤다
// 석우님 풀이
function solution(array) {
let answer = 0;
let 값 = new Set(array)
let 종합 = {};
for (const number of 값) {
종합[number] = array.filter(element => element === number).length
}
let 개수 = Object.values(종합)
answer = +Object.keys(종합).find(key => 종합[key] === Math.max(...개수))
개수.indexOf(Math.max(...개수)) !== 개수.lastIndexOf(Math.max(...개수)) ? answer = -1 : 0
return answer;
}
// for (const number of 값) {
// let 개수 = array.filter(element => element === number).length
// 개수 > answer ? answer = number : 0
// }
// 도영님의 풀이
function solution(array) {
let temp = {}
let cnt = 0;
for(i in array){
temp[array[i]] = array.filter(v => v === array[i]).length
}
let maxCnt = Math.max(...Object.values(temp))
for(i of Object.values(temp)){
if(maxCnt === i){
cnt++}
}
if(cnt > 1){
return -1
}else{
return +Object.keys(temp)[Object.values(temp).indexOf(maxCnt)]
}
}
// 성진님의 풀이 - 1
function solution(array) {
var answer = [];
let arr = new Set(array);
arr = [...arr]
// console.log(arr)
for(let value of arr){
let num = 0;
for(let i=0; i<array.length; i++){
if(value === array[i]) num += 1
}
answer.push(num)
}
// console.log(answer)
let result = Math.max(...answer);
// 만약 answer 배열에서 result값이 두개 이상이면 -1을 리턴
// 아니라면 result값을 arr에서 찾아서 그 값을 리턴
if(answer.filter(e => e === result).length >= 2) return -1
else return arr[answer.indexOf(result)]
}
// 2
function solution(array) {
let arr = new Map();
for(let i of array){
arr.set( i , (arr.get(i) || 0) +1)
}
let result = [...arr].sort((a,b) => b[0] - a[0]); // 원소 먼저 정렬
result.sort((a,b) => b[1] - a[1]); // 최빈값 정렬
if( result.length === 1) return result[0][0]
else if( result[0][1] === result[1][1]) return -1
else return result[0][0]
}
// 3
function solution(array) {
let copy = [...array]; // 삭제될 배열을 만들어줌
let result = {};
for(let i of array){
result[i] = 0;
}
// console.log(result)
// 위 코드는 각 요소의 초깃값을 설정
for(let i of array){
if(copy.includes(i)){
copy.splice(copy.indexOf(i),1);
result[i]++
}
}
result = Object.entries(result);
result.sort((a,b) => b[1] - a[1])
return (result.length === 1 || result[0][1] > result[1][1]) ? parseInt(result[0][0]) : -1;
}
참고
- 모던자바스크립트
map set (새로운 배열을 만든다) - ... 스프레드 문법
Object.values() 값만 뽑아내는 문법 - length를 활용하자
'알고리즘 > Programmers' 카테고리의 다른 글
[알고리즘 스터디][프로그래머스 Lv.1] 최소직사각형 (0) | 2022.12.31 |
---|---|
[알고리즘 스터디][프로그래머스 Lv.1] 나머지가 1이 되는 수 찾기 (0) | 2022.12.25 |
[프로그래머스 Lv.0] 양꼬치 (0) | 2022.11.05 |
[프로그래머스 Lv.0] 배열의 평균 (0) | 2022.11.05 |
[프로그래머스 Lv.0] 각도기 문제로 알아보는 filter.length 써먹기 (0) | 2022.11.02 |