01. 프로그래머스(1단계) - 폰켓몬

성훈·2021년 7월 19일
0

Algorithm

목록 보기
1/61
post-thumbnail

📌 문제의 조건

  • 총 N마리 폰켓몬 중 N/2를 가지고 갈 수 있다.
  • 최대한 많은 종류의 폰켓몬을 가지고 가야한다.

제한사항 🤔

  • nums는 폰켓몬의 종류 번호가 담긴 1차원 배열입니다.
  • nums의 길이(N)는 1 이상 10,000 이하의 자연수이며, 항상 짝수로 주어집니다.
  • 폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수로 나타냅니다.
  • 가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다.

📌 풀이

의사 코드 👨‍💻

  1. 빈배열을 선언
  2. 인자 배열을 반복문을 돌려서 빈 배열에 없는 요소라면 push한다.
  3. 배열의 length를 리턴

첫 풀이 👨‍💻

function solution(nums) {
    const newMon = [];
    for(let i = 0; i < nums.length; i++){
        if(newMon.indexOf(nums[i]) === -1){
            newMon.push(nums[i])
        } 
        if(newMon.length === nums.length/2){
            break;
        }
    }

    return newMon.length;
}

추가학습 후 풀이 👨‍💻

function solution(nums) {
    const max = nums.length / 2;
    const newMon = new Set([...nums]);
    return newMon.size > max ? max : newMon.size
}

📌 회고

이건 반복문으로 풀어도 되지만 Set 객체를 알고 있는지 확인하는 알고리즘 문제인 것 같다.
확실히 Set 객체를 사용하니 코드가 말도 안되게 간결해진걸 확인 할 수있다.

이런 식으로 모르던 개념을 배워나가니 개념을 어떻게 적용해야할지 확인하며 배우니 확실히 좋은 것 같다.

📌 문제 출처

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

profile
어떻게 이걸 풀어낼 수 있을까

0개의 댓글