[프로그래머스] 폰켓몬 - LV.1

지히·2022년 7월 2일
0

📑 문제 주소

https://programmers.co.kr/learn/courses/30/lessons/1845


🔥 문제 설명

현재 존재하는 폰켓몬의 종류와 갯수를 알려주는 nums 배열이 주어지고, 갯수가 N개라고 할 때, N/2개 만큼 가질 수 있다. 이때 제일 다양하게 가질 수 있는 갯수를 return 하도록 한다.


🔥 나의 풀이

미리 arr이라는 변수의 list를 만들어 놓고, for문을 돌며 list의 in 함수로 새로운 종류의 폰켓몬을 찾도록 하였다. 그리고 특정 길이(N/2) 이상이라면 break하도록 하는 분기문을 생성하였다.

def solution(nums):
    arr = []
    length = len(nums)
    for i in range(length):
        if nums[i] not in arr:
            arr.append(nums[i])
        if len(arr) >= length/2:
            break
    return len(arr)

✅ 다른 사람의 풀이

항상 대단한 풀이는 존재하는것 같다. min함수와 set함수를 사용하여 간단하게 풀 수 있었다.

📍 set 함수
'set'이라는 이름에서 알수 있듯이, 집합 자료형이다.
따라서 다음과 같은 특징을 가진다.
1. 순서가 존재하지 않는다. ➡ 인덱싱 불가
2. 중복된 값을 가지지 않는다.
3. 값의 변경 가능
+) 집합 자료형이라서 그런지 일반적인 자료형처럼 추가/삭제등의 메소드 외의 교집합/합집합/차집합등의 집합의 연산을 할 수 있는 메소드도 존재한다.

내 풀이는 list의 in을 사용했지만 set을 사용하면 한번에 주어진 폰켓몬 배열을 중복없이 만들 수 있다. 이렇게 구한 set 형식의 길이와 최대로 구할 수 있는 N/2를 비교하면 바로 문제를 풀 수 있다.

def solution(ls):
    return min(len(ls)/2, len(set(ls)))

set을 사용한것도 놀랍지만 무엇보다 min을 사용했다는 점이 제일 놀라웠다. 생각해보면 어차피 가장 큰 값은 N/2일테니까 굳이 비교하지 않아도 될테데... min함수를 더욱 적극적으로 활용해봐야겠다~

profile
알고리즘 천재가 될꺼야:)

0개의 댓글