목록전체 글 (145)
공부 기록장
https://www.acmicpc.net/problem/11279 코드import sys, heapqinput = sys.stdin.readlinemax_heap = []n = int(input())for i in range(n): num = int(input()) * -1 if num == 0: print(heapq.heappop(max_heap) * -1 if max_heap else 0) else: heapq.heappush(max_heap, num) 접근 방식1. 주어진 수가 0이 아닌 경우, 그 수를 -1을 곱해서 음수로 만들어 최대 힙으로 활용할 최소 힙에 넣는다2. 주어진 수가 0인 경우, 최대 힙에서 가장 큰 값을 꺼내서 출력하고, 힙이 비어 있으..
https://www.acmicpc.net/problem/2075 코드import heapq as hqimport sysinput = sys.stdin.readlinen = int(input())heap = []init_numbers = list(map(int, input().split()))for num in init_numbers: hq.heappush(heap, num)for i in range(n-1): numbers = list(map(int, input().split())) for num in numbers: if heap[0] 접근 방식1. 처음에 주어진 N개의 숫자를 최소 힙에 모두 넣는다2. 이후 추가로 들어오는 숫자들을 확인하며, 힙의 최솟값(heap[0]..
https://www.acmicpc.net/problem/17609 코드n = int(input())for _ in range(n): st = input() left, right = 0, len(st) - 1 answer = 0 while left 접근 방식1. 양 끝에서 포인터로 이동하면서 같으면 계속 이동2. 다르면 양쪽을 각각 이동시켜본 후 회문이지 확인3. 한 쪽 문자만 제거하고 회문이면 유사회문4. 한 쪽 문자를 제거하고도 회문이 아니면 회문 아님5. else 문에 안걸리면 일반 회문 배운 점1. 문자열에서는 슬라이싱이 유용하게 사용된다2.st[left:right][::-1] 위와 같이 슬라이싱으로 잘라낸 후, 다시 해당 잘라낸 문자열을 뒤집기도 가능하다
https://www.acmicpc.net/problem/2230 코드import sysinput = sys.stdin.readlinen, m = map(int, input().split())arr = [int(input()) for _ in range(n)]arr.sort()end = 1ans = int(2e9)for i in range(n): while arr[end] - arr[i] = m: ans = min(ans, arr[end] - arr[i])print(ans)'''n개의 정수 수열두 수를 골랐을 때(같은 수 가능), 그 차이가 M 이상이면서 제일 작은 경우?''' 접근 방식1. 투포인터 사용하기 위해 수열 정렬2. 시작점은 0, 끝점은 1에서 시작 (같은 수 불가능)3. ..