코테) 프로그래머스 폰켓몬

cs2tree·2023년 5월 3일
0

코테

목록 보기
1/2

문제

문제 링크

문제 접근

  1. if 유니크한 폰켓몬의 개수 > 내가 가질 수 있는 폰켓몬 개수: 내가 가질 수 있는 폰켓몬 개수 else 유니크한 폰켓몬 개수

나의 풀이

더 간결한 풀이

if문 한 줄에 쓰기

if - else 문

풀어서 쓰면 이렇게 쓰게 되지만,

if unique > given:
	answer = given
else:
	answer = unique

한 줄로 간결하게 표현하면 이렇게 쓰게 된다.

answer = given if unique > given if something > unique 

이 경우는 최솟값을 구하는 것이므로 더 간결하게는...

answer = min(given, unique) 

if - elif - else 문

풀어서 쓰면 이렇게 쓰게 되지만,

if unique > something:
	answer = something
elif something > given:
	answer = given
else:
	answer = unique

한 줄로 간결하게 표현하면 이렇게 쓰게 된다.

answer = something if unique > something if something > given else unique

이 경우는 최솟값을 구하는 것이므로 더 간결하게는...

answer = min(given, something, unique) 

set

set은 집합을 나타낸다

a = set([1, 1, 2, 2])
print(a)

# {1, 2}

이렇게도 정의할 수 있다

a = {1, 1, 2, 2}
print(a)

# {1, 2}

교집합

a = {1, 2, 2}
b = {2, 3, 4}

print(a.intersection(b))

# {2}

print(a&b)

# {2}

합집합

a = {1, 2, 2}
b = {2, 3, 4}

print(a.union(b))

# {1, 2, 3, 4}

print(a|b)

# {1, 2, 3, 4}

차집합

a = {1, 2, 2}
b = {2, 3, 4}

print(a.difference(b))

# {1}

print(a-b)

# {1}

같은 집합인지

a = {1, 2, 2}
b = {2, 3, 4}
c = {1, 2}

print(a==b)
# False

pritn(a==c)
# True

원소가 하나도 겹치지 않는 집합인지

a = {1, 2, 2}
b = {2, 3, 4}
c = {3, 4, 5}

print(a.isdisjoint(b))
# False

print(a.isdisjoint(c))
# True

부분 집합

a = {1, 2, 2}
b = {2, 3, 4}
c = {1}

print(b.issubset(a))
# False

print(c.issubset(a))
# True

set의 add, update, remove, discard, pop, clear

add: 원소 하나 추가

a = {1, 2}
print(a.add(3))
# None

a.add(3)
print(a)
# {1, 2, 3}

b = a.add(3)
print(b)
# {1, 2, 3}

update: 집합 단위로 추가

a = {1, 2}

print(a.update({3, 4}))
# None

a.update({3, 4})
print(a)
# {1, 2, 3, 4}

b = a.update({3, 4})
print(b)
# {1, 2, 3, 4}

discard

a = {1, 2}

a.remove({2})
print(a.update({3, 4}))
# None

a.remove({2})
print(a)
# {1}

b = a.remove(2)
print(b)
# {1}

다만 내부에 삭제하려는 값이 없으면 오류!

remove

a = {1, 2}

a.discard(2)
print(a.discard({3, 4}))
# None

a.discard(2)
print(a)
# {1}

b = a.discard(2)
print(b)
# {1}

*다만 내부에 삭제하려는 값이 없어도 오류가 나지 않고, 아무 일도 일어나지 않음!*

pop

a = {1, 2}

print(a.pop())
# 1
print(a)
# {2}

pop의 특징은 삭제하는 원소를 반환한다는 점.

다만 내부에 삭제하려는 값이 없으면 오류!

clear

a = {1, 2}

a.clear()
print(a)
# set()

+참고)
리스트/튜플 -> set -> 리스트/튜플
중복은 제거되나 순서는 보장할 수 없음.

+) 리스트에서 remove, pop, del, clear

remove
: 원소를 지정해서 삭제
: 두 개 이상 있을 경우 가장 앞의 값 하나만 삭제

a = [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]

del
: 인덱스를 지정해서 삭제

a = [1, 2, 3, 4]
del (2)
print(a)
# [1, 3, 4]

pop
: 지정한 위치의 값을 취득한 후 삭제
: 지정한 값이 없을 경우 마지막 값 (첫번째 아님!)

a = [1, 2, 3, 4]

print(a.pop(2))
# 3
print(a)
# [1, 2, 4]

다만 내부에 삭제하려는 인덱스가 없으면 오류!

clear
: 전체 삭제

a = [1, 2, 3, 4]

a.clear()
print(a)
# []
  • 참고) remove, pop, del, slicing 속도

del > remove, pop > slicing

slicing과 del은 거의 두배 가까이 차이난다.

profile
___호기심 많은 씨앗___ 씨앗이 나무가 될 때까지 :D

0개의 댓글