본문 바로가기
코딩테스트/프로그래머스

코딩테스트 해시(hash) 문제 - 폰켓몬 풀이 과정 및 리팩토링

by 코드스니펫 2024. 3. 10.
반응형

코딩테스트 해시(hash) 문제 - 폰켓몬 해결 방법 및 리팩토링

 

프로그래머스 로고

 

알고리즘 문제 해결은 프로그래밍 역량을 키우는 데 있어 필수적인 과정입니다. 특히, 다양한 데이터를 효율적으로 관리하고 처리해야 하는 상황에서 해시(HASH)를 활용하는 능력은 중요합니다.

 

이번 글에서는 폰켓몬 선택 문제를 통해 해시를 사용하는 실제 예를 살펴보면서, 여러분이 문제 해결 방법을 배우고, 이를 일상적인 코딩 문제나 실제 개발 상황에 적용할 수 있는 방법을 알아보겠습니다. 이 과정을 통해, 다양한 종류의 데이터를 효율적으로 처리하는 방법을 학습하고, 더 나아가 프로그래밍 능력을 한 단계 끌어올릴 수 있기를 기대합니다.

 

 

코딩테스트 해시 문제 - 폰켓몬

 

문제 소개

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

▲ 문제를 직접 확인하고 풀어보세요! ▲

 

문제의 핵심은 주어진 폰켓몬의 종류 번호 배열에서 N/2만큼을 선택했을 때, 가능한 한 많은 다양한 종류의 폰켓몬을 선택하는 것입니다. 이때, 같은 종류의 폰켓몬은 같은 번호를 가지고 있다는 점을 주목해야 합니다.

 

 

필자의 풀이방법

function solution(nums) {
    let set = new Set();
    let selectNum = Array(...nums).length/2;
    
    nums.forEach(x => {
        set.add(x);
    });
    
    return set.size>selectNum ? selectNum : set.size;
}

 

이 코드는 자바스크립트의 Set 객체를 활용하여 문제를 해결했습니다. Set 객체는 중복을 허용하지 않기 때문에, 배열 nums에 있는 폰켓몬 종류 번호를 모두 set에 추가하면, 중복 없이 고유한 폰켓몬 종류만 남게 됩니다.

 

이후 선택할 수 있는 폰켓몬 수(N/2)와 고유한 폰켓몬 종류 수(set.size)를 비교하여, 더 작은 값을 결과로 반환합니다. 이는 최대로 다양한 종류의 폰켓몬을 선택할 수 있는 최적의 방법을 나타냅니다.

 

 

코드 리팩토링

function solution(nums) {
    const set = new Set(nums);
    return Math.min(set.size, nums.length / 2);
}

 

위 코드는 기존 작성한 코드를 더 간결하게 만든 버전입니다. new Set(nums)를 통해 바로 nums 배열의 중복을 제거한 Set 객체를 생성합니다. 이후 Math.min() 함수를 사용하여 set.size와 nums.length / 2 중 더 작은 값을 반환함으로써, 가장 많은 종류의 폰켓몬을 선택할 수 있는 수를 효율적으로 계산합니다.

 

 


 

끝으로

이 글을 통해 소개된 폰켓몬 선택 문제와 그 해결 방법은 해시를 사용하여 데이터의 중복을 제거하고, 주어진 조건 내에서 최적의 결과를 도출하는 방법을 보여줍니다.

 

문제 해결 과정에서 배울 수 있는 해시의 활용은 단순한 문제 해결 뿐만 아니라, 실제 개발 상황에서도 다양한 데이터를 효율적으로 처리하는 데 큰 도움이 될 것입니다. 알고리즘 문제 해결 능력을 향상시키고자 하는 모든 분들에게 이러한 접근 방식이 유익하길 바라며, 앞으로도 다양한 문제를 통해 여러분의 코딩 능력이 한층 더 성장하기를 기원합니다.

 

▼ 아래 문제도 풀어보세요! ▼

 

 

프로그래머스 피보나치 수 문제풀이, 해설

프로그래머스 피보나치 수 문제풀이, 해설 프로그래머스 피보나치 문제 소개와 해설, 필자의 문제풀이 과정에 대해 소개하겠습니다. 아래 풀이 과정을 보면서 코딩에 있어서 유익한 인사이트를

lemonlog.tistory.com

 

 

프로그래머스 카펫 문제풀이, 해설 알고리즘 문제

프로그래머스 카펫 문제풀이, 해설 알고리즘 문제 프로그래머스 카펫 문제 소개와 해설, 필자의 문제풀이 과정에 대해 소개하겠습니다. 아래 풀이 과정을 보면서 코딩에 있어서 유익한 인사이

lemonlog.tistory.com