본문 바로가기

분류 전체보기161

1966-프린트 큐 (python) 1. 큐에서 첫 번째 원소를 뽑는다 2. 나머지 원소들 중 우선순위가 더 큰 게 있다면 큐 목록의 뒤로 보낸다 3. 그렇지 않으면 출력한다 - count +1 한다 - 현재 문서가 찾고자 하는 문서의 인덱스와 맞는지 확인한다 (맞다면 break하여 반복문을 빠져나온다) 4. 1-3번의 과정을 반복한다 tc = int(input()) answer = [] for c in range(tc): count = 0 n, m = list(map(int, (input().split()))) priorities = list(enumerate(map(int, (input().split())))) while True: cur = priorities.pop(0) if any(cur[1] < p[1] for p in prio.. 2020. 10. 3.
1874-스택 수열 (python) 1. prev = 0, next = 첫번째 원소값 으로 시작 2. prev next일 때, prev부터 (next+1)까지 내려오며 pop - popped == 0일 경우에만 answer에 '-' append - 같은 조건일 때, 해당 인덱스 popped = 1로 수정 4. popped[next-1] 에 +1 하기 (인덱스는 0부터 시작하므로 next-1을 해줘야 함) - 여기서 +1을 해주는 이유는, 이미 pop된 원소가 또다시 pop되는 경우를 계산하기 위함 (-> 출력 기준이.. 2020. 10. 3.
합병/병합 정렬(merge sort) 분할 정복 알고리즘의 대표적인 예 1. 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 2. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 3. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. * 시간 복잡도 : O(n log n) (= O(n) (각 단계의 노드 길이) * O(log n) (단계의 깊이)) - 문제에서 데이터 개수가 최대 1,000,000개, 제한 시간 2초 이내라면 시간 복잡도가 위와 같은 O(n logn)의 정렬 알고리즘을 이용해야 함 (2^10 = 약 1,000이므로 n=1,000,000일 때, n logn = 20,000,000이고, 파이썬에서는 1초에 2천~5천만 번의 연산이 가능하므로 제한에 걸리지 않는다(간신히 통과할 수도 있음)) de.. 2020. 10. 1.
2780-블랙잭 (python) >> 처음 작성한 코드 (통과) N, M = map(int, input().split(' ')) cards = list(map(int, input().split(' '))) totals = [] for x in range(N-1): for y in range(x+1, N-1): for z in range(y+1, N): total = cards[x] + cards[y] + cards[z] if total > 다른 코드 참고 N, M = map(int, input().split(' ')) cards = list(map(int, input().split(' '))) result = 0 for x in range(N-1): for y in range(x+1, N-1): for z in range(y+1, N).. 2020. 9. 29.