
10815 숫자 카드
import sys
input = sys.stdin.readline
N = int(input())
my_arr = set(map(int, input().split())) # 리스트를 집합으로 변환
M = int(input())
serch_arr = list(map(int, input().split()))
# 기존 정렬과 비교하면서 일치하면 1 아니면 0
result = [1 if num in my_arr else 0 for num in serch_arr]
print(' '.join(map(str, result)))
- 리스트 컴프리헨션: 리스트를 순회하며 가지고 있으면 1을, 아니면 0을 출력
# 리스트 컴프리헨션
result = [1 if num in my_arr else 0 for num in my_arr]
# 풀어서 쓰면
result = []
for num in serch_arr: # serch_arr의 각 요소를 순회
if num in my_arr: # my_arr에 num이 있으면
result.append(1) # 1을 추가
else: # 없으면
result.append(0) # 0을 추가
⚠️ 에러
- 제출 결과: 시간 초과
N = int(input())
my_arr = list(map(int, input().split()))
# 중복 제거 후 정렬
sorted_arr = sorted(set(my_arr))
- 정렬한 집합이 어디에도 쓰이지 않고 불필요해서 아래와 같이 수정했다.
# 리스트를 집합으로 변환
my_arr = set(map(int, input().split()))
14425 문자열 집합
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
my_arr = []
search_arr = []
for _ in range(N):
my_arr.append(input())
for _ in range(M):
search_arr.append(input())
cnt = 0
for word in search_arr:
if word in my_arr:
cnt += 1
# 리스트 컴프리헨션으로 하면
cnt = sum(1 for word in search_arr if word in my_arr)
print(cnt)
- Enter로 입력 : arr.append(input())으로 입력받아야함 !!!!
💡 딕셔너리
# 딕셔너리 기본 모습
{Key1: Value1, Key2: Value2, Key3: Value3, ...}
# 예제
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.keys() # dict_keys(['name', 'phone', 'birth'])
a.values() # dict_values(['pey', '010-9999-1234', '1118'])
a.items() # dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])
a.get('name') # 'pey'
a.get('phone') #'010-9999-1234'
7785 회사에 있는 사람
import sys
input = sys.stdin.readline
N = int(input())
temp = dict() # 딕셔너리 형
for _ in range(N):
a, b = map(str, input().split())
# 출입
if b == 'enter':
temp[a] = b
# 퇴근시 삭제
else:
del temp[a]
# 사전 순의 역순으로 정렬
temp = sorted(temp.keys(), reverse=True)
print("\n".join(temp))
- 딕셔너리 형으로 입력받는게 포인트
- 역순으로 정렬 reverse=True
💡 집합 자료형
# 집합 자료형
# 특징: 중복 허용 X, 순서 X
s = set()
# 교집합, 합집합, 차집합 구하기
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
s1 & s2 # {4, 5, 6}
s1.intersection(s2) # {4, 5, 6}
s1 | s2 # {1, 2, 3, 4, 5, 6, 7, 8, 9}
s1.union(s2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 - s2 # {1, 2, 3}
s1.difference(s2) # {1, 2, 3}
s2 - s1 # {8, 9, 7}
s2.difference(s1) # {8, 9, 7}
# 집합 자료형 관련 함수
s1 = set([1, 2, 3])
s1.add(4) # {1, 2, 3, 4}
s1.update([4, 5, 6]) # {1, 2, 3, 4, 5, 6}
s1.remove(2). # {1, 3}
1269 대칭 차집합
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
# 집합 연산은 set 자료형 사용
A = set(map(int, input().split()))
B = set(map(int, input().split()))
print(len(A-B) + len(B-A))
- 집합 연산은 set() 자료형 사용
11478 서로 다른 부분 문자열의 개수
import sys
input = sys.stdin.readline
S = input().strip()
word = set()
for i in range(len(S)):
for j in range(i, len(S)):
word.add(S[i:j+1])
print(len(word))
'알고리즘' 카테고리의 다른 글
| 💻 [백준][파이썬] 1012 유기농배추 (0) | 2024.12.16 |
|---|---|
| 💻 [백준][파이썬] 단계별로 풀어보기 - 스택, 큐, 덱(28278, 10773, 9012, 18258, 2164, 11866, 28279, 2346) (0) | 2024.12.12 |
| 💻 [백준][파이썬] 단계별로 풀어보기 - 정렬 모음(2750, 2587, 25305, 2751, 10989, 1427, 11650, 11651, 1181, 10814, 18870) (1) | 2024.12.05 |
| 💻 [백준][파이썬] 단계별로 풀어보기 - 2차원 배열 모음(2783, 2566, 10798, 2563) (1) | 2024.12.03 |
| 💻 [백준-2667] python3 단지 번호 붙이기 (0) | 2024.12.02 |