[Python] 백준 1302번 베스트셀러
·
Coding Test/Baekjoon
1. 문제(출처) 2. 문제 풀이시간 제한 2초 10^7 * 2, N = 1000 O(N^2) 이하 가능 여유 있음문제 목표 : 책들 중 가장 많이 팔린 거 출력. 중복일때는 알파벳순딕셔너리로 key 책이름, value count 하고 동일한 책이 있으면 알파벳순 출력하면 될듯.3. 코드 설계 1회차 import sysinput = sys.stdin.readlinen =int(input())dic = {}for _ in range(n): name = input().strip() if name in dic: dic[name] += 1 else: dic[name] = 1max_value = max(dic.values())best = []for key,val in di..
[Python] 백준 10546번 배부른 마라토너
·
Coding Test/Baekjoon
1. 문제(출처)2. 문제 풀이시간 제한은 1초 = 10^7 잡고, N = 100,000 이니까 O(N log N) 이하 복잡도만 가능 in 연산자 활용해서 내부에 일치하는 값 있는지 확인하는 전형적인 문제풀이 방법1. set 사용 : 문제에 중복이 있다고 했으니 set은 사용 불가 X2. 이진탐색 : 알파벳도 정렬이 되긴하지만 굳이? 사용 X3. 딕셔너리 : key에 name, value에 count +1 해서 채우고 이름 나올때마다 -1 해주고 최종적으로 1이 남는 key를 출력하면 될 거 같다.3. 코드 설계코드 - 딕셔너리 활용import sysinput = sys.stdin.readlinen = int(input())dic = {}for _ in range(n): # key : name, v..
[Python] 백준 2776번 암기왕
·
Coding Test/Baekjoon
1. 문제(출처)2. 문제 접근시간 제한이 2초 이니까 최대 10^7 의 연산이 가능하고, 입력 N = 1,000,000 이기 때문에 시간 복잡도는 O(N log N), O(N), O(log N) 등 정도가 가능할 거 같다. 문제의 목표는 수첩2에 적힌 M개의 숫자들이 각각 수첩 1에 존재하는지 확인하는 것이다. 단순하게 생각하면 in 연산자 사용해서 돌면 되지만 list의 경우 처음부터 끝까지 보기 때문에 최악의 경우 N x M 이어서 10^12 이기 때문에 시간 초과가 날 수 밖에 없다.그러면 어떻게 접근해야할까? 방법은 2가지가 있다.1. 해시 자료구조 (set, dicionary) 사용 - set 함수의 경우 데이터를 해시 테이블에 저장하고 탐색하므로 list처럼 전부를 도는게 아니라 빠르다. ..
[Python] 백준 7662번 이중 우선순위 큐
·
Coding Test/Baekjoon
1. 문제(출처)2. 문제 풀이문제를 간단히 요약하면 이중 우선순위 큐가 있을때 1. 값 삽입, 2. 최댓값 삭제, 3. 최솟값 삭제 연산을 진행 후에 남아 있는 최댓값 최솟값을 출력하는 문제이다.이 문제의 핵심은 최댓값, 최솟값 2개의 우선순위가 존재하기 때문에 각각의 큐를 사용하여 저장하고, 이 두개의 큐를 동기화 시켜주는게 핵심이다. 동기화를 시켜주기 위해 삽입 연산 과정에서 idx를 부여하여 튜플 형태로 저장하였다. 3. 코드 설계1회차import sysimport heapq input = sys.stdin.readlinen = input()for _ in range(int(n)): num = int(input()) max_heapq = [] min_heapq = [] vis..
[Python] 백준 11279번 최대 힙
·
Coding Test/Baekjoon
1. 문제(출처) 2. 문제 풀이heap을 활용하는 문제.기본적으로 heap은 최소 힙이기 때문에 문제의 핵심은 heap 최대 값을 어떻게 도출할 것인가- 를 활용하면 쉽게 해결할 수 있을 거 같다.3. 코드 설계1회차import sysimport heapqinput = sys.stdin.readlinen = int(input())heap = []for _ in range(n): num = int(input()) if num == 0: if not heap: print(0) else: print(-heap[0]) heapq.heappop(heap) else: heapq.heappush(heap..
[Python] 백준 9012번 괄호
·
Coding Test/Baekjoon
1. 문제(출처)2. 문제 풀이시간복잡도는 고려안해도 될듯하고, count 개수로 yes, no 판단해서 풀면 될 거 같다.3. 코드 설계1회차import sysfrom collections import dequeinput= sys.stdin.readlineN = int(input())for _ in range(N): M = input() count = 0 result = True for i in M: if i == '(': count += 1 elif i == ')': count -= 1 if count 4. 회고처음 접근할때 리스트에 문자열을 넣고 빼는 식으로 해야하나 생각했었는데 굳이 그렇게 ..
[Python] 백준 10828번 스택
·
Coding Test/Baekjoon
1. 문제 (출처)2. 문제 풀이N이 10^4이기때문에 O(N^2) 밑에 알고리즘은 다 쓸 수 있다.큐 문제와 마찬가지로 deque를 사용해서 스택을 구현하면 될듯.3. 코드 설계1회차 import sysfrom collections import dequeinput = sys.stdin.readlineN = int(input())stack = deque()for _ in range(N): m = input().split() if m[0] == 'push': stack.append(m[1]) elif m[0] == 'pop': if stack: print(stack[-1]) stack.pop() else: ..
[Python] 백준 18258번 큐 2
·
Coding Test/Baekjoon
1. 문제 (출처) 2. 문제 풀이이번 문제는 deque 자료구조를 활용해서 해결하면 될 거 같다. deque은 Double-ended Queue의 줄임말로 양방향의 특징이 있는 큐라고 이해하면 될 거 같다.아래 간단한 그림으로 설명을 대체한다.3. 코드 설계1회차 - deque 사용 ximport sysN = input()result = []for _ in range(0,int(N)): a = input().split() if a[0] == 'push': result.append(a[1]) elif a[0] == 'pop': if result: print(result[0]) result.pop(0) ..