목록코테준비 (91)
JiSoo's Devlog
n, m = map(int, input().split()) a = set() b = set() for i in range(n): a.add(input()) for i in range(m): b.add(input()) r = sorted(list(a & b)) # 교집합 print(len(r)) for i in r: print(i) set을 이용해 각 집합에 듣도 못한 사람의 명단과 보도 못한 사람의 명단을 add를 이용해 저장 교집합 &를 사용해 중복되는 문자열을 선택하고 sorted로 사전식으로 정렬한다
import sys n = int(sys.stdin.readline()) a = set() for i in range(n): k = sys.stdin.readline().strip().split() if k[0] == 'add': a.add(int(k[1])) elif k[0] == 'remove': a.discard(int(k[1])) elif k[0] == 'check': if int(k[1]) in a: print(1) else: print(0) elif k[0] == 'toggle': if int(k[1]) in a: a.discard(int(k[1])) else: a.add(int(k[1])) elif k[0] == 'all': a = set([i for i in range(1, 21)]) el..
n, m, v = map(int, input().split()) g = [[0] * (n+1) for i in range(n+1)] for i in range(m): a, b = map(int, input().split()) g[a][b] = g[b][a] = 1 visit = [0] * (n+1) def dfs(v): visit[v] = 1 # 방문한 점 1 print(v, end=" ") for i in range(1, n+1): if (visit[i]==0) and (g[v][i]==1): dfs(i) def bfs(v): q = [v] visit[v] = 0 # 방문한 점 0 while q: v = q.pop(0) print(v, end=" ") for i in range(1, n+1): if (..
n = int(input()) def sm(num): if num == 1: return 1 elif num == 2: return 2 elif num == 3: return 4 else: return sm(num-1) + sm(num-2) + sm(num-3) for i in range(n): num = int(input()) print(sm(num)) DP문제 1 - (1) - 1개 2 - (1+1), (2) - 2개 3 - (1+1+1), (1+2), (2+1), (3) - 4개 4 - (1+1+1+1), (1+1+2), (1+2+1), (1+3), (2+1+1), (2+2), (3+1) - 7개 5 - (1+1+1+1+1), (1+1+1+2), (1+1+2+1), (1+1+3), (1+2+1+1)..
n = int(input()) a = [0] * (n+1) # n만큼 초기화 for i in range(2, n+1): # 1은 횟수가 0이니까 2부터 탐색 a[i] = a[i-1] + 1 # 기본 값으로 이전 항의 연산 횟수 + 1 if i % 2 == 0: a[i] = min(a[i], a[i//2] + 1) if i % 3 == 0: a[i] = min(a[i], a[i//3] + 1) # 미리 저장해 둔 값과 몫+1 한 값 중 더 작은 값 print(a[n]) DP문제로 작은 문제의 결괏값을 큰 문제에서도 활용하기 다이나믹 프로그래밍은 두 가지 방식이 있는데 보통 상향식 방식을 이용했을 때 성능이 좋다 상향식 방식은 메모이제이션 기법 활용 - 한 번 연산을 통한 결괏값을 메모리에 저장해 두고 같은..
n, k = map(int, input().split()) a = [] c = 0 for i in range(n): a.append(int(input())) a.sort(reverse=True) for j in a: c += k // j k = k % j print(c) 오름차순으로 입력받지만 동전의 최소 개수를 구해야 하기 때문에 큰 수부터 계산해줘야 해서 sort로 역순 정렬 정렬된 리스트 안에서 반복문으로 몫을 더해주고 나머지 구해서 반복
n, m, B = map(int, input().split()) g = [list(map(int, input().split())) for i in range(n)] mt = 9999999999 h = 0 for i in range(257): bottom = 0 top = 0 for j in range(n): #가로 for k in range(m): #세로 if g[j][k] >= i: #블럭이 현재 높이보다 크면 top += g[j][k] - i else: bottom += i - g[j][k] if bottom > top + B: continue t = bottom + (top*2) if t = i라면 흙을 파서 높이 맞춰주고 땅을 판 횟수를 top에 저장 땅[x][y] < i라면 흙을 쌓아 높이 맞춰..
ord 함수는 아스키코드 값을 반환해 준다 a~z : 97~122 A~Z: 65~90 mod는 나머지 연산이기 때문에 %로 계산해 출력
k, n = map(int, input().split()) a=[] for i in range(k): a.append(int(input())) start = 1 end = max(a) while(start = n: start = mid + 1 else: end = mid - 1 print(end) 길이 범위를 1부터 가장 긴 랜선 길이까지 잘라진 랜선의 개수가 n보다 많으면 mid보다 더 큰 수들만 다시 확인하면 되기 때문에 mid+1 최대 랜선 길이를 구해야 하기 때문에 필요한 랜선 개수보다 작아지는 순간 mid -1
from collections import deque t = int(input()) for i in range(t): n, m = map(int, input().split()) a = deque(list(map(int, input().split()))) c = 0 while(a): b = max(a) f = a.popleft() m -= 1 if b == f: c += 1 if m < 0: print(c) break else: a.append(f) if m < 0: m = len(a) - 1 몇 번째로 출력되는지 알고 싶은 궁금한 문서가 남은 큐 중에서 가장 큰 수가 될 때까지 검사 알고 싶은 문서의 인덱스를 m으로 계산 제일 앞에 있는걸 popleft로 뽑고 알고 싶은 문서 m의 위치가 앞으로 당겨지기..