목록코딩 테스트/백준 문제 풀이 (105)
공부 기록장
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. ..
https://www.acmicpc.net/problem/1806 코드n, s = map(int, input().split())arr = list(map(int, input().split()))start, end = 0, 0sum_ = arr[0]# 수 범위 보고 적절한 최댓값으로 설정하기ans = 100001while True: if sum_ 접근 방식1. 투포인터를 사용하기 위해서는 수열을 정렬해야겠다고 생각 2. 포인터를 각각 0으로 초기화3. 합이 s보다 작은 경우, 끝 포인터를 이동 및 부분합에 더하기3. 합이 s 이상인 경우, 최솟값 갱신해주고 시작 포인터 이동 및 부분합에서 빼기4. end == n일 때 반복문 탈출 (즉, 모든 경우 확인 후 종료) 배운 점1. 투포인터로 풀어야 한다..