😉 아이디어1. 특이케이스 생성에 집중 👉 _!n > 2 이상부터는 특이케이스 없음!_ 2. _!n = 1 or 2!_의 특이케이스로 점화식 생성😉 풀이def solution(n): answer = 0 # n = 1 -> 1 (1) # n = 2 -> 2 (1) # n = 3 -> 3 (0) # n = 4 -> f(3) * 1 + f(2) * 1 + f(1) * 0 # n = 5 -> f(4) * 1 + f(3) * 1 + f(2) * 0 + f(1) * 0 # 패턴: [0, 1, 1, 0, 0, ...] dp = [0, 1, 2, 3] pattern = [0, 1, 1, 0, 1, 0] isZero = True for i in range(4, n + 6): val = (dp[i - 1] + dp[i -..
분류 전체보기
😉 아이디어_!이전 차량의 종료위치 _!end!_ 기준으로 정렬하면 _!end!_ 이전에 모든 경로를 통틀어 1개의 카메라로 취급가능😉 풀이def solution(routes): answer = 0 routes.sort(key = lambda x : (x[1])) print('routes', routes) prev = [-30_001, -30_001] for route in routes: start, end = route # prev 내에서 단 1개만 필요 -> 범위가 벗어날 경우만 카메라 추가 if prev[1] ✔ 링크 : https://school.programmers.co.kr/learn/courses/30/..
😉 아이디어1. _!n!_이 홀수일 때는 생성불가 _!return 0!_ 짝수만 고려2. _!n = 2인 경우 신규 패턴 3개 생성!_, _!n = 4인 경우 이후 2개씩 생성!_3. _!f(10) = f(8) * 3 + f(6) * 2 + f(4) + f(2) * 2 + 2!_😉 풀이def solution(n): answer = 0 if n == 1 : return 0 MOD = 1_000_000_007 arr = [0] * (n + 10) arr[2] = 3 arr[4] = 11 for i in range(6, n + 10): if i % 2 == 1: continue ..
😉 아이디어1. _!skill_trees!_를 순회하며 _!스킬트리 변수 skill!_에 영향여부 확인2.영향을 받는다면 _!스킬트리 변수 skill!_에서 _!popleft()!_실행😉 풀이from collections import dequedef solution(skill, skill_trees): answer = 0 for tree in skill_trees: memo = deque(list(skill).copy()) skills = list(tree) isValid = True for s in skills: if s in memo: if memo[0] == s: ..
😉 아이디어1. _!n이 7미만일 경우!_까지 각 특수한 조합 개수 확인 👉 _![1, 2, 5, 2, 2, 4]!_반복됨2. 3의 배수로 반복되고 있으므로_!f(n + 3) - f(n)!_를 통해 _!f(n)!_의 점화식 계산😉 풀이 def solution(n): dp = [0] * (n + 10) dp[1] = 1 dp[2] = 3 dp[3] = 10 MOD = 1_000_000_007 # n이 6 이하인 경우 저장 for i in range(4, n + 1): if i == 4: dp[i] = dp[i - 1] + dp[i - 2] * 2 + dp[i - 3] * 5 + 2 elif i == 5: ..
😉 아이디어1. _!어피치를 이겨야하는 경우!_or _!져야하는 경우!_로 구분 경우의 수 배열 저장2. 각 경우를 순회하며 화살의 개수를 고려, _!나의 점수!_및 _!어피치의 점수!_ 계산3. 문제 내의 다양한 예외조건 분기처리😉 풀이combinations = []def solution(n, info): answer = [] # true, false 조합 for i in range(0, 12): combination([0] * 11, 0, 0, i) max_gap = -1 max_case = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] for co in combinations: arrows = n ..
😉 아이디어1. 과제가 진행되는 시간 기준 구현 _!0초 ~ plans의 최대값 * 1_000!_2. 매 초마다 _!now!_에 저장된 과제의 처리시간 감소3. 과제를 멈추고 새로운 과제를 시작할 경우 _!stopped!_리스트에 값 추가 👉 과제가 종료되면 이 리스트에서 꺼내 할당😉 풀이from collections import dequedef solution(plans): for plan in plans: plan[1] = hm_to_ss(plan[1]) plan[2] = mm_to_ss(plan[2]) plan.append(plan[1] + plan[2]) plans.sort(key = lambda x : x[1]) # ..
😉 아이디어1. 투포인터 활용 👉 포인터 사이의 값을 유지 및 관찰, 조건 일치 시 리스트에 저장2. 리스트 정렬 기준 '인덱스의 값 차이(갭)', '첫번째 인덱스'😉 풀이def solution(sequence, k): answer = [] # 투포인터 + 누적합 l = 0 r = 0 lst = [] mx = len(sequence) summ = sequence[l] while l ✔ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/178870?language=python3