목록코딩테스트 (12)
나의 개발일지

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/49994 🔑 좌표 크기 2배, 길에만 체크 10 X 10 좌표를 21 X 21 좌표로 만든다. 정 가운데서 출발하기 때문에 +1 을해서 정 가운데서 출발할 수 있도록 함 (10, 10) 따라서 이동도 2칸씩 한다. (좌표를 2배 늘렸으니까) 💡 하지만 이동 후에 체크를 이동한 자리에 하는 것이 아닌 이동한 길에 체크 ex) 오른쪽으로 간다면 실제 이동은 +2지만 체크는 +1에 같은 곳을 다른 길로는 갈 수 있기 때문 좌표 범위 제한도 잘해주면 끝 ✨ def solution(dirs): answer = 0 MAP = [[0] * 21 for _ in range(21)] x, y = 10, 10..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12938# 🔑 몫과 나머지 먼저 s를 n으로 나눈 몫으로 리스트를 채움 n = 5, s = 199 일 때 [39, 39, 39, 39, 39] 만들어짐 합이 199가 되려면 4가 부족함 부족한 만큼 리스트의 뒤에서부터 1씩 나눠줌 (오름차순 정렬로 리턴해야 하기 때문) [39, 40, 40, 40, 40] 만들어짐 끝 ✨ def solution(n, s): answer = [] if n > s: return [-1] for i in range(n): answer.append(s // n) # 골고루 나누기 remain_n = s % n # 골고루 나누고 남는 숫자 for i in range(..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12927 🔑 최대 힙 works의 값들을 최대 힙으로 만든다. 최대 힙은 가장 큰 값이 가장 왼쪽에 있도록 한다. 최대 힙으로 만들려면 값들을 음수로 변경해서 힙에 추가하면 된다. works = [2, 4, 3] 일 때 이 값들을 음수로 바꿔서 힙에 넣으면 (heappush) [-4, -3, -2] 이렇게 가장 큰 값이 왼쪽에 있을 수 있다. heappop을 사용해서 가장 왼쪽 값을 빼낸 다음 1시간 작업한다. 4는 3이 돼야 하는데 현재 값은 -4로 되어있기 때문에 +1을 했다. 1시간 작업을 하고 빼낸 작업을 다시 힙에 넣는다. 이 작업을 n번 반복 후 야근 지수를 구하면 끝 ✨ from..

문제 : https://www.acmicpc.net/problem/24337 🔑 a, b를 만족하는 건물 먼저 세우기 n, a, b = 10, 6, 3 일 때 1 ~ a-1까지 건물을 먼저 짓는다. [1, 2, 3, 4, 5] 그다음 가장 높은 건물을 짓는다. max(a, b) = 6 [1, 2, 3, 4, 5, 6] b-1 ~ 1까지 건물을 마저 짓는다. [1, 2, 3, 4, 5, 6, 2, 1] 10개를 세워야 하는데 8개의 건물이 세워져 있다. 건물 2개를 현재 만족하고 있는 조건을 해치지 않고 추가해야 한다. 출력되는 숫자를 가장 작게 만들기 위해서는 1을 왼쪽 편에 추가해야 한다. 하지만 가장 왼쪽에 1을 추가하는 것이 아닌 1번 인덱스에 추가해야 한다. n, a, b = 10, 1, 9 일 ..

문제 : https://www.acmicpc.net/problem/13975 🔑 우선순위 큐, 최소 힙 파일의 크기가 가장 작은 두 개를 골라서 하나의 파일로 합친다. 이 과정을 위해 힙을 사용 이때 드는 비용을 더한다. 합쳐진 파일을 다시 힙에 넣는다. 힙에 들어있는 파일이 1개가 될 때까지 반복하면 끝 ✨ from heapq import heappush, heappop, heapify import sys input = sys.stdin.readline t = int(input()) for _ in range(t): k = int(input()) file = list(map(int, input().split())) heapify(file) answer = 0 while len(file) >= 2: x ..

문제 : https://www.acmicpc.net/problem/5557 🔑 DP dp 배열에 경우의 수를 저장 n = int(input()) num = list(map(int, input().split())) dp = [[0] * 21 for _ in range(n)] dp[0][num[0]] = 1 for i in range(1, n-1): for j in range(0, 21): if dp[i-1][j]: if j + num[i] = 0: dp[i][j-num[i]] += dp[i-1][j] print(dp[n-2][num[-1]])

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17678 🔑 마지막 운행 셔틀 마지막 운행 셔틀에 자리가 남으면? 마지막 운행 시간에 맞춰서 오기 자리가 있다면 제일 마지막 시간에 딱 맞춰가도 탈 수 있기 때문 마지막 운행 셔틀에 자리가 없으면? 제일 마지막에 도착한 사람보다 1분 일찍 오기 이 버스를 놓치면 회사 못 간다. 무조건 마지막에 도착한 사람보다 1분 일찍 와서 기다리자 def solution(n, t, m, timetable): start_time = 540 # 첫 셔틀 시간 end_time = 540 + (n - 1) * t # 마지막 셔틀 도착 시간 for i in range(len(timetable)): # 시간 분으로 ..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/150370 🔑 년.월.일을 일 수로 변환 한 달 = 28일로 고정이기 때문에 쉽게 변환 가능 약관 종류에 대한 유효 기간은 딕셔너리로 저장 유효 기간도 일 수로 변환해서 저장 ex) "A 6" = "A" : 168 오늘 날짜 >= 개인정보 수집 날짜 + 약관 유효 기간 약관 만료일이 지났으면 파기 끝 def day(d): # 년월일 -> 일 d = list(map(int, d.split("."))) d = d[0] * 336 + d[1] * 28 + d[2] return d def solution(today, terms, privacies): answer = [] today = day(tod..