[Programmers] - 체육복

오동훈·2021년 4월 21일
0

Programmers

목록 보기
23/64
post-thumbnail

1. Problem 📃

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

다음 문제는, 체육복 여벌이 있고, 없는 학생과 잃어버린 학생들이 있을때 문제의 조건에 따라 주었을 때 체육수업을 들을 수 있는 학생의 수는 몇명인지 반환하는 문제입니다.

2. Logic 👨‍🏫

  1. 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있다는 문제 조건하에 lost와 reserve에 공존할 수 있는 숫자들에 대해 set 자료형을 이용해 공존하는 값 삭제해주고
  2. 왼쪽 요소부터 탐색해준다.
  3. 만약에 발견된다면 그 값을 s_lost에서 제거해준다.

3. Code 💻

1. 내가 푼 코드

def solution(n, lost, reserve):
    s_lost = set(lost) - set(reserve)
    s_reserve = set(reserve) - set(lost)
    for i in s_reserve:
        if i-1 in s_lost:
            s_lost.remove(i-1)
        elif i+1 in s_lost:
            s_lost.remove(i+1)
    return n - len(s_lost)

-----------출력을 위한 코드입니다-------------

reserve = [1, 3, 6]
lost = [2, 4, 5, 7]
print(solution(7, lost, reserve))

4. Feedback 📚

1. set 자료형

1. 집합 자료형

- set 자료형은 순서가 없고 중복을 허용하지 않는다는 특징을 가지고 있다.

# 집합 선언
set1 = set([1,2,3])
set2 = set("oddong hello")
 
print set1
print set2

set([1, 2, 3])
set([' ', 'o', 'n', 'd', 'l', 'o','d', 'e', 'l', 'h', 'g']) // 순서가 없는것을 볼 수 있다.

2. 집합에 데이터 추가 및 삭제

# 집합 선언
set1 = set([1,2,3])
 
# 값 하나 추가 : add(x)
set1.add(4)
print set1
 
# 값 여러개 추가 : update(x)
set1.update([5,6,7,8,9,10])
print set1
 
# 값 제거 : remove(x)
set1.remove(10)
print set1
 
# 집합 set1 제거
del set1

set([1, 2, 3, 4])
set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
set([1, 2, 3, 4, 5, 6, 7, 8, 9])

3. 인덱스를 참조해야 할 때

# 집합 선언
set1 = set([1,2,3])
list1 = list(set1)
 
print list1
print list1[1]

[1, 2, 3]
2

집합은 순서가 없어 인덱스를 이용해서 값을 참조할 수 없다. 리스트나 튜플로 변환해야 인덱스를 이용한 참조를 함 수 있다.


4. 집합 연산

# 집합 선언
set1 = set([1,2,3])
set2 = set([2,4,5,6])
set3 = set() # 공집합
 
# set1과 set2의 교집합
print set1 & set2
print set1.intersection(set2)
 
# set1과 set2의 합집합
print set1 | set2
print set1.union(set2)
 
# set1과 set2의 차집합
print set1 - set2
print set1.difference(set2)
print set2.difference(set1)
 
# set1과 set2의 합집합에서 교집합을 뺀 차집합
print set1 ^ set2

set([2])
set([2])
 
set([1, 2, 3, 4, 5, 6])
set([1, 2, 3, 4, 5, 6])
 
set([1, 3])
set([1, 3])
set([4, 5, 6])
 
set([1, 3, 4, 5, 6])

set을 이용해 차집합이 가능하다는 부분을 인지하고 이번 문제에 적용해봤는데 정말 유용했고, 꼭 알아뒀으면 하는 기능중 하나입니다.

profile
삽질의 기록들🐥

0개의 댓글