https://www.acmicpc.net/problem/17503코드from heapq import heappop, heappushimport sysinput = sys.stdin.readlinen, m, k = map(int, input().split())beers = []for _ in range(k): v, c = map(int, input().split()) # 선호도, 도수 레벨 beers.append([v, c])beers.sort(key=lambda x: x[1]) # 도수 레벨 오름차순 정렬def solution(): picked = [] # 고른 맥주들 preference = 0 # 고른 맥주들의 선호도 합 for b in beers: ..
DataStructure
https://www.acmicpc.net/problem/7785 코드n = int(input())exist = set()for _ in range(n): name, io = input().split() if io == "enter": exist.add(name) else: exist.remove(name)e_lst = sorted(list(exist))for i in range(len(e_lst)-1, -1, -1): print(e_lst[i])
https://www.acmicpc.net/problem/2493 코드n = int(input())towers = list(map(int, input().split()))stack = []ans = [0]*nfor i in range(n): while stack and stack[-1][0] for문을 i까지 돌았을 때 stack에는 towers[i-1]와 그보다 큰 타워들만 저장되어 있다. i번째 타워는 스택에서 자신보다 작은 타워는 다 pop하고 스택의 top, 즉 자신보다 큰 타워의 인덱스+1을 ans[i]에 저장하면 된다. 문제의 테스트케이스로 예를 들자면,위의 예시에서는 높이가 4인 5번째 타워까지 왔을 때 스택에 저장된 타워는 바로 이전 타워인 4번과 그보다 더 큰 타워인 2번이다.그러..
https://www.acmicpc.net/problem/10867 코드#include #include using namespace std;int main(){ int n; cin >> n; set s; int tmp; for(int i=0;i::iterator iter=s.begin();iter!=s.end();iter++){ printf("%d ", *iter); } return 0;} 이 문제는 집합을 이용하여 풀면 쉽게 풀 수 있다. 다행히 C++에는 집합이 이미 구현되어 있기 때문에 가져다 쓸 수 있다.#include 집합에 입력받은 수들을 넣었다가 출력해주기만 하면 되는데, set은 기본적으로 원소를 넣을 때마다 정렬되어서 삽입되므로 정렬해줄 ..
https://www.acmicpc.net/problem/1269 코드a_num, b_num = map(int, input().split())a = set(map(int, input().split()))b = set(map(int, input().split()))print(len(a-b)+len(b-a)) 파이썬은 집합 자료형과 관련 연산이 정의되어 있어서 이 문제를 쉽게 풀 수 있었다. a와 b를 set()을 이용하여 집합으로 만들고, '-' 연산을 이용하여 A-B와 B-A 차집합을 구한 뒤 두 차집합의 길이를 더해주면 된다