목록KAKAO (20)
나의 개발일지

문제 : 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..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72413 🔑 다익스트라 1번 풀이 : 모든 노드를 시작점으로 n번의 다익스트라를 호출 n → s + n → a + n → b 비용의 최솟값을 찾는다. 최대 n이 200이므로 굉장히 느림 (최대 200번의 다익스트라 호출), 최대 14677.97ms 2번 풀이 : s, a, b를 시작 지점으로 총 3번의 다익스트라 호출 s → n + a → n + b → n 비용의 최솟값을 찾는다. n이 몇이든 다익스트라는 3번만 호출하면 되기 때문에 굉장히 빠름, 최대 230.38ms 모든 노드를 시작점으로 n번의 다익스트라 호출 from collections import defaultdict from he..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/60057 🔑 문자열을 자르고 현재, 현재+1을 비교하기 현재, 현재+1 이 같은 동안에는 개수만 증가 다른 문자가 나오면 그동안 누적한 개수 + 문자를 변수에 연결시키기 개수가 1이라면 문자만 변수에 연결 처음에는 1도 같이 연결시키고 마지막에 replace로 1을 없애주었다. 이 경우 10, 11.. 같은 개수가 있을 때 1을 없애버려서 실패, 그래서 조건문에서 걸러주었다. def solution(s): answer = 987654321 for i in range(1, len(s) + 1): slice = [] # n개 단위로 자른 문자열 리스트 compress = "" # 압축한 문자열 ..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/81302 🔑 P 일 때 자기 자리와 상하좌우 자리의 값을 -1 하고 최종적으로 -2 이하인 값이 있는 대기실은 거리두기 실패 파티션의 위치는 큰 값을 주고 -2 아래로 내려가는 일을 없게 한다. -2가 있다는 것은 맨해튼 거리 2 내에 사람이 있다는 의미이다. def makeMap(p): # 겹치는 구간 표시 할 5*5 리스트 newMap = [[0] * 5 for _ in range(5)] for i in range(5): for j in range(5): if p[i][j] == 'X': # 파티션은 100으로 지정하자 newMap[i][j] = 100 return newMap def s..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67257 🔑 조합을 구하고, 스택으로 계산, eval() from itertools import permutations def solution(expression): answer = 0 op = [] # 연산자 종류 if '+' in expression: op.append('+') # 무슨 연산자가 쓰였나 찾아보자 if '-' in expression: op.append('-') if '*' in expression: op.append('*') exp = [] st = 0 for i in range(len(expression)): # 문자열로 된 표현식을 리스트로 바꾸자 if expressi..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/60058 🔑 설명 그대로 구현하는 것? 올바른 괄호 검사와 u, v를 나누는 코드는 함수로 따로 빼는 게 보기 편하다. 그리고 설명대로 코드 짜면 되는데 설명 이해하기가 굉장히 어려웠음,, def check(p): # 올바른 괄호일까? if p[0] == ')': return False else: stack = [0] * len(p) k = -1 for i in p: if i == '(': k += 1 stack[k] = '(' elif stack[k] == '(' and i == ')': k -= 1 else: return False return True def make_uv(p): # u..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/64062 🔑 이진 탐색 처음 풀이는 k 크기의 슬라이딩 윈도우로 각 윈도우의 최댓값을 저장하고 그중 최솟값을 반환했다. 정확성은 다 맞지만 효율성이 집에 가라고 했다. 그래서 이진 탐색으로 풀이를 했다. mid 명이 건너면서 연속으로 k개가 부서졌으면 사람 수를 줄였다. 무사히 건널 수 있으면 사람 수를 늘려서 최대로 몇 명이 건널 수 있는지를 구했다. def solution(stones, k): l = 1 r = 200_000_000 while l