유형 : 구현

풀이 시간 : 5분

 

1. 나의 풀이 

def solution(nums):
    answer = 0
    sort = []
    for n in nums:
        if n not in sort:
            sort.append(n)
    goal = len(nums) // 2
    exist = len(sort)
    if goal <= exist:
        return goal
    else:
        return exist
    return sort

 

list를 만들어 중복 없는 폰켓몬 넘버 배열을 만들고, 그것의 길이와 goal 중 min을 return하도록 했다. 

 

코드 최적화를 거치면 아래와 같겠다. 

def solution(nums):
    answer = 0
    sort = []
    for n in nums:
        if n not in sort:
            sort.append(n)
    return min(len(nums) // 2, len(sort))

 

2. set 사용 

list에서 중복을 제거하기 위해서는 set을 활용할 수 있다. 

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

 

- s = set() : set 생성 

- 순서가 없음

- in : 동일하게 동작

- 원소 추가 : set.add

- update : 여러 개의 데이터 추가

- remove : 제거- discard : 제거하지만 사라져도 keyerror 발생하지 않음 

 

* 복사*dict, set의 ,copy() 는 얕은 복사깊은 복사를 하려면 s = set (t) 와 같은 생성자 이용이 필요함 

 

  • | - 합집합 연산자
  • & : 교집합 연산자
  • - : 차집합 연산자
  • ^ : 대칭차집합 연산자(합집합 - 교집합)

 

  • union - 합집
  • intersection - 교집합
  • difference - 차집합
  • symmetric_difference : 대칭차집합 연산자(합집합 - 교집합)
  • issubset : 부분집합 여부 확인
  • issuperset : issubset과 반대 superset인지 확인
  • isdisjoint : 교집합이 없으면 True, 있으면 False

'프로그래머스 > Lv. 1' 카테고리의 다른 글

36. 모의고사  (0) 2024.07.14
35. 2016년  (1) 2024.07.14
33. 카드 뭉치  (0) 2024.07.14
32. 콜라 문제 ★  (0) 2024.07.14
31. 두 개 뽑아서 더하기 (itertools - combinations)  (0) 2024.07.14
복사했습니다!