Programming [Python] (411) 썸네일형 리스트형 #114 백준 파이썬 [15649] N과 M (1) - 순열 https://www.acmicpc.net/problem/15649 #Solution itertools 모듈의 permutations를 이용해 푼다. input 숫자가 작아서 시간 초과는 (아직) 고려 안해도 된다. import itertools N, M = map(int, input().split()) num_list = [i for i in range(1, N+1)] for num in itertools.permutations(num_list, M): for i in num: print(i, end = ' ') print(end = '\n') #113 백준 파이썬 [10845] 큐 https://www.acmicpc.net/problem/10845 #Solution class fire: def __init__(self): self.queue = [] def push(self, num): self.queue.append(num) def pop(self): if self.queue: return self.queue.pop(0) else: return -1 def size(self): return len(self.queue) def empty(self): if self.queue: return 0 else: return 1 def front(self): if not self.queue: return -1 else: return self.queue[0] def back(self): if .. #112 백준 파이썬 [10866] 덱 https://www.acmicpc.net/problem/10866 #Solution collections 모듈의 deque을 사용해서 풀어준다. import collections class water: def __init__(self): self.deque = collections.deque() def push_back(self, num): self.deque.append(num) def push_front(self, num): self.deque.appendleft(num) def pop_front(self): if self.deque: return self.deque.popleft() else: return -1 def pop_back(self): if self.deque: return self.d.. #111 백준 파이썬 [1966] 프린터 큐 https://www.acmicpc.net/problem/1966 #Solution 다음과 같은 알고리즘을 통해 파악할 수 있다. 1) prior_number에 모든 수를 넣어서 우선 순위 maximum 숫자를 확인할 때 쓴다. max(prior_number) 2) 큐 안에 N만큼의 index를 넣는다. 3) sequence로 해당 숫자가 몇 번째로 꺼내지는 지를 표시한다. 4-1-1) 큐의 맨 처음 index에 해당하는 printer_list의 숫자가 우선 순위가 가장 높다면 이를 result에 담는다. 4-1-2) prior_number에서 가장 큰 수를 하나 지워준다. 4-2) else: 가장 높은 우선순위가 아니라면 큐 첫번째를 큐의 가장 뒷부분으로 다시 보낸다. 4-3) 반복한다. case = .. #110 백준 파이썬 [17298] 오큰수 - 스택 https://www.acmicpc.net/problem/17298 #Solution 이 문제는 스택으로 풀어야한다. 특이한 점은 index를 스택에 넣어주어야한다는 점!! 다음과 같은 논리를 따라서 결과값을 출력한다. 0) result / stack / num_list 세 개의 리스트를 만들어준다. 1) n번 루프를 돌린다. O(n) for문은 index인 i를 기준으로 돌아간다. 2-1) 스택이 비어있으면 i를 스택에 넣어준다. 2-2) 스택의 top이 가르키는 num_list[top] 이 num_list[i]보다 크거나 같으면 i를 스택에 넣어준다. 2-3) 스택의 top이 가르키는 num_list[top] 이 num_list[i]보다 작으면 스택을 pop해주고 result[pop값]에 num_li.. #109 백준 파이썬 [1874] 스택 수열 https://www.acmicpc.net/problem/1874 #Solution 쉽게 접근하기 위해서 여러 리스트를 만들었다. 1) 정답 리스트 2) 정답과 비교할 리스트 3) 오름차순 리스트 4) 스택 5) 출력(+-)리스트 스택의 LIFO원리를 이용하면 쉽게 만들 수 있다. numbers = int(input()) answer_list = [] ascending_num_list = [] #먼저 맞는지 확인해야할 answer_list를 생성한다. for _ in range(numbers): answer_list.append(int(input())) #정답리스트와 비교할 compare_list를 생성한다. ascending_num_list = sorted(answer_list) stack = [] r.. #108 백준 파이썬 [1655] 가운데를 말해요 - 힙, 우선순위 큐 https://www.acmicpc.net/problem/1655 #Solution 처음엔 우선순위큐를 위해 힙정렬로 했다가 시간초과가 나서, 힙을 두개로 쪼갰다. 중앙값은 결국 수를 동등하게 나누어서 하위 1/2 수 중 가장 큰 수, 상위 1/2 중 가장 작은 수이다. 따라서 최대 힙, 최소 힙 두가지를 만들어서 풀어주면 된다. 1) 힙정렬 (시간 초과) import sys import heapq numbers = int(input()) heap = [] for _ in range(numbers): num = int(input()) heapq.heappush(heap, num) temp_heap = list(heap) for _ in range((len(temp_heap)+1)//2 - 1): heap.. #107 백준 파이썬 [11286] 절댓값 힙 https://www.acmicpc.net/problem/11286 #Solution #105, #106번에 다뤘던 힙 문제와 똑같다. 다만 heap을 tuple로 구성했을 때 맨 앞 숫자만 가지고 정렬하므로 앞은 abs(절대값) 내장 함수를 써주고 두 번째는 원래 수를 써줌으로써 절댓값 정렬을 할 수 있게 한다. import sys import heapq numbers = int(input()) heap = [] for _ in range(numbers): num = int(sys.stdin.readline()) if num != 0: heapq.heappush(heap, (abs(num), num)) else: try: print(heapq.heappop(heap)[1]) except: print(0) 이전 1 ··· 35 36 37 38 39 40 41 ··· 52 다음