일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 수신자 대상 다르게
- 구현
- 깊게 생각해보기
- 쿠키
- 트랜잭샨
- 좋은 코드 나쁜 코드
- 코드 계약
- branch 전략
- AWS
- 누적합
- 완전탐색
- 레디스 동시성
- gRPC
- 검색어 추천
- 카카오
- docker
- jwt 표준
- 숫자 블록
- 셀러리
- 디버깅
- BFS
- piplining
- 이분탐색
- prg 패턴
- spring event
- 프로그래머스
- 알람 시스템
- 결제서비스
- 객체지향패러다임
- 백준
- Today
- Total
목록프로그래머스 (6)
코딩관계론
문제 이해하기 인천 앞바다에는 등대와 등대 사이를 오가는 뱃길이 총 n-1개 있는 등대가 n개 있습니다. 윤성이는 전력을 아끼기 위해 일부 등대만 켜둘 계획입니다. 그러나 모든 뱃길이 안전하게 운항하기 위해서는 각 뱃길의 양쪽 끝에 적어도 하나의 등대가 켜져 있어야 합니다. 문제 해결 아디어 1. leaf 노드를 불을 꺼야 함으로 먼저 leaf노드를 찾습니다. 다음과 같이 더이상 dfs로 진입할 곳이 없다면 해당 노드는 leaf노드가 됩니다. def dfs(graph, node, visited, lighthouses): for next_node in graph[node]: if not visited[next_node]: dfs(graph, next_node, visited, lighthouses) 2. ..
문제 이해하기 숫자 0이 적힌 블록들에 다른 숫자가 적힌 블록들을 설치하려고 한다. 블록을 설치하는 규칙은 다음과 같습니다 블록에 적힌 번호가 n 일 때 가장 첫 블록은 n * 2번 째 도로의 위치에 설치, 그 다음은 n * 3, 4 ...도로의 위치에 설치합니다. 이 때 기존에 설치된 블럭이 존재한다면 해당 블록을 빼고 새로운 블록을 설치합니다. 각 블록은 오름차순으로 주어집니다. 또한 블럭의 숫자는 1 ~ 10,000,000까지의 숫자만 존재합니다. 문제 해결 방법 1. 도로의 입장에서 생각해보면 도로에 설치될 수 있는 블럭은 도로의 위치의 약수입니다. 예를 들면 10번 도로의 위치에는 1, 2, 5의 블록이 설치될 수 있다. 10의 블록이 설치될 수 없는 이유는 10(도로)은 10(블럭) * 1이기..
문제 이해하기 판매원 A가 칫솔을 판매하면 판매한 금액의 10프로가 판매원 A의 상관인 B에게 분배되고, B의 상관인 C에게 분배되는 형태의 판매망을 운영하고 있습니다. 이 때 조직 내 누가 얼만큼의 이득을 가져갔는지 알고자하는 문제였습니다. 문제 해결 방법 설명하기 조직 내 누가 얼마만큼의 이득을 가져갔는지를 파악하기 위해서는 각 판매원이 판매한 금액을 추적해야 합니다. 예를 들어, 판매원 A가 100만원짜리 칫솔을 판매하면, A는 100만원의 10%인 10만원을 B에게, B는 10만원의 10%인 1만원을 C에게 주어야 합니다. 따라서 이 판매망에서 각 판매원이 얼마만큼의 이득을 가져가는지를 계산하려면, 각 판매원이 판매한 금액을 추적하고, 이를 기반으로 각 판매원이 상위 조직원에게 주는 이득을 계산하..
[문제 설명] 출발지에서 목적지까지 최단거리로 이동하는 경우를 구하는 문제입니다. [해결 방법] 해당 문제는 BFS를 사용해 풀이하는 문제입니다. BFS를 이용한 빠른 길 찾기는 출발점으로부터 인접 노드들의 최단거리를 갱신하는 구조입니다. 이 때, 출발점이 하나이고 목적지는 x개일 수 있습니다. 주어진 예시를 보면 출발점은 x개인 반면에 도착점은 하나로 고정되어 있습니다. 즉, 도착점을 출발점으로 생각하여 인접 노드들의 최단거리 노드를 갱신하면 도착점에서부터 출발점까지의 최단거리를 구할 수 있습니다. 결과적으로 도착점을 출발점으로 탐색을 진행한다면 도착점에서 출발할 수 있는 모든 노드들의 최단거리를 구할 수 있습니다. sources 배열에 있는 노드들의 최단거리를 return하여 정답을 받을 수 있습니다..
아이디어 도출 방법 나는 힌트를 k와 room_number의 숫자 차이로 알았다. k의 max는 10^12지만, room_number는 최대 20만이기 때문이다. 다음으로는 방의 점유 여부를 표시하기 위해서 해당 room_number을 key로 하고 value는 [점유여부, 다음 방 번호]를 가지는 dict 클래스를 생성했다. 해당하는 방 번호에 사용자가 있는지 확인하는 방법은 두 가지가 있다. 최대 O(K)만큼 돌면서 dict [room_number]을 호출하는 방식 union find 알고리즘을 사용해 O(1)에 확인하는 방법 이번 문제의 KEY는 union find short path 알고리즘을 아느냐가 제일 중요했다. Union Find short path 문제에서 초기 상태는 아래와 같이 구성된..
아이디어 도출 방법 1. 항상 시간문제는 단위 통일하는 것이 핵심이다. 제일 작은 단위인 초로 통일하는 것을 추천합니다. 2. 초를 사용하면 시간순으로 정렬할 수 있으니 사람들이 도착하는 시간과 버스가 출발하는 시간을 비교해서 버스에 탑승 가능한 승객들을 deque에서 삭제해준다. #탑승객과 미잠 while time_table and bus_go < n: """마지막 버스전까지 모든 탑승객을 태운다. """ arrive_time = time_table.popleft() if arrive_time