ponketmon문제: Set활용

김민주·2022년 8월 29일
0

알고리즘 TIL

목록 보기
1/1

첫번째 해결방법

  • pocket이라는 별도 저장소 마련
  • for문includes의 대환장 콜라보
function solution(nums) {
    const pocket = [];
    
    for (const ponketmon of nums) {
        if (!pocket.includes(ponketmon)) {
            pocket.push(ponketmon);
        }
    }
    
    const pocketSize = pocket.length;
    const maxPossibleSize = nums.length / 2;
    
    if (pocketSize > maxPossibleSize) {
        return maxPossibleSize;
    } else {
        return pocketSize;
    }
}

테스트 통과속도

두번째 해결방법

  • Set활용: 중복 한번에 제거
function solution(nums) {
    const pocket = new Set();
    
    for (const ponketmon of nums) {
        pocket.add(ponketmon);
    }
    
    const pocketSize = pocket.size;
    const maxPossibleSize = nums.length / 2;
    
    if (pocketSize > maxPossibleSize) {
        return maxPossibleSize;
    } else {
        return pocketSize;
    }
}

테스트 통과속도

세번째 해결방법

  • nums는 배열이기 때문에 Set의 파라미터로 넣을 수가 있다
    - 배열을 파라미터로 넣으면 한번에 중복을 제거한 set으로 만들 수 있다.
  • 삼항연산자로 코드 수 감소
function solution(nums) {
    const pocket = new Set(nums);
    const maxPossibleSize = nums.length / 2;
    
    return pocket.size > maxPossibleSize ? maxPossibleSize : pocket.size;   
}

테스트 통과속도


속도 비교

  • 테스트 16 기준 33.04ms >> 1.62ms > 0.49ms

  • 테스트 1, 2, 3 같이 작은 테스트들은 속도에 큰 차이가 나지 않는데 15, 16, 17 처럼 크기가 커질수록 속도가 확연히! 차이나는 것을 볼 수 있다.

profile
성공은 퍼포먼스가 아니라 지속성이다. 언제 이루어지는지가 아니라, 어떤 모양으로 이루는지가 더 중요하다.

0개의 댓글

관련 채용 정보