코테 및 알고리즘
프로그래머스 - 귤 고르기
Jay_Jung
2024. 8. 6. 10:52
<문제>
https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
<문제 핵심>
1. 딕셔너리 자료구조를 사용해서 배열에 존재하는 숫자의 중복갯수를 구한다.
-> 배열을 순회 하면서 이미 객체에 있는 값이 들어오면 존재하는 value에 +1시켜주고, 없는 값이 들어오면 객체에 값을 넣어줌과 동시에 1로 초기화 해주기
2. Object 관련 메소드 숙지(대표적 3가지)
Object.keys(obj)
– 객체의 키만 담은 배열을 반환한다.
Object.values(obj)
– 객체의 값만 담은 배열을 반환한다.
Object.entries(obj)
– [키, 값] 쌍을 담은 배열을 반환합니다. -> 2차원 배열 의미
3. Map 자료구조를 활용해도 됌
map.keys() – 각 요소의 키를 모은 반복 가능한(iterable, 이터러블) 객체를 반환한다.
map.values() – 각 요소의 값을 모은 이터러블 객체를 반환한다.
map.entries() – 요소의 [키, 값]을 한 쌍으로 하는 이터러블 객체를 반환한다. 이 이터러블 객체는 for..of반복문의 요소로도 활용한다.
<Map의 기본 형태 : 이터러블 객체>
❗Map은 배열이 아니라는 점 주의
freq = {
1 => 3,
2 => 5,
3 => 2
}
<Map 자료구조 참고 레퍼런스>
[JS] 📚 자바스크립트 자료형 Map 🚩 정리
자바스크립트는 객체와 배열이라는 강력한 자료구조를 제공합니다. 객체 – 키가 있는 컬렉션을 저장함 배열 – 순서가 있는 컬렉션을 저장함 하지만 현실 세계를 반영하기엔 이 두 자료구
inpa.tistory.com
<문제 풀이과정 및 순서도>
✅ freq라는 맵 생성
✅ tangerine[i]가 key, 키에 해당하는 빈도수를 값으로 설정하여 freq객체에 빈도수를 카운트 해준다.
✅ freq 맵에서 값 들만 가져와서 배열로 반환해주기 + freq객체의 값(빈도 수)을 내림차순으로 정렬해 빈도수가 높을수록 앞에 위치하도록 정렬한다.
✅ for문을 통해 반복하면서 해당 빈도수를 k에서 빼주고 이를 k가 0보다 작거나 같을때까지 반복한다.
function solution(k, tangerine) {
const freq = new Map();
for(let i = 0; i < tangerine.length; i++) {
const target = freq.get(tangerine[i])//키에 해당하는 값 가져오기
freq.set(tangerine[i], target ? target + 1 : 1)
}
const val = Array.from(freq.values()).sort((a, b) => b - a);
let count = 0;
for(let i = 0; i < val.length; i++) {
if(k <= 0) break;
k -= val[i]
count++
}
return count;
}
<전체 코드>
function solution(k, tangerine) {
const freq = new Map();
for(let i = 0; i < tangerine.length; i++) {
const target = freq.get(tangerine[i])//키에 해당하는 값 가져오기
freq.set(tangerine[i], target ? target + 1 : 1)
}
const val = Array.from(freq.values()).sort((a, b) => b - a);
let count = 0;
for(let i = 0; i < val.length; i++) {
if(k <= 0) break;
k -= val[i]
count++
}
return count;
}