일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 완전탐색
- langgraph
- next-stock
- BFS
- AWS
- gRPC
- 관측가능성
- 알람시스템
- 아키텍쳐 개선
- 카카오
- 몽고 인덱스
- 추천 검색 기능
- 프로그래머스
- JPA
- piplining
- 베타적락
- 이분탐색
- ai agent
- 쿠키
- dau 3만명
- 디버깅
- 크롤링
- ipo 매매자동화
- docker
- 구현
- 셀러리
- spring event
- 결제서비스
- 누적합
- Today
- Total
목록개발 (138)
코딩관계론

문제 이해하기 판매원 A가 칫솔을 판매하면 판매한 금액의 10프로가 판매원 A의 상관인 B에게 분배되고, B의 상관인 C에게 분배되는 형태의 판매망을 운영하고 있습니다. 이 때 조직 내 누가 얼만큼의 이득을 가져갔는지 알고자하는 문제였습니다. 문제 해결 방법 설명하기 조직 내 누가 얼마만큼의 이득을 가져갔는지를 파악하기 위해서는 각 판매원이 판매한 금액을 추적해야 합니다. 예를 들어, 판매원 A가 100만원짜리 칫솔을 판매하면, A는 100만원의 10%인 10만원을 B에게, B는 10만원의 10%인 1만원을 C에게 주어야 합니다. 따라서 이 판매망에서 각 판매원이 얼마만큼의 이득을 가져가는지를 계산하려면, 각 판매원이 판매한 금액을 추적하고, 이를 기반으로 각 판매원이 상위 조직원에게 주는 이득을 계산하..

문제 이해하기 양의 정수 n을 k진수로 변환한 후, 다음의 네 가지 규칙에 맞는 소수를 찾는 문제입니다. 0P0 형태의 소수: 양쪽에 0이 있는 소수 P0 형태의 소수: 오른쪽에만 0이 있는 소수 0P 형태의 소수: 왼쪽에만 0이 있는 소수 P 형태의 소수: 양쪽에 0이 없는 소수 예를들면 437674이라는 십지수 정수를 3진수로 변환하면 "211020101011"이 됩니다. 이 숫자들 중에 규칙이 적용되는 숫자를 찾으면 2110(P0 조건) 011(0P 조건), 020(0P0 조건)이 있어 답이 3이 됩니다. 문제 해결 방법 설명하기 1. 10진수를 k진수로 변환할 수 있어야합니다. 10진수에서 n을 k 진수로 변환하는 방법은 아래와 같습니다. n을 k로 나눈 몫과 나머지를 구합니다. 해당 나머지를 가..

문제 이해하기 이진트리를 수로 표현하는 문제입니다. 이진트리의 노드를 가장 왼쪽 노드부터 가장 오른쪽 노드까지, 왼쪽에 있는 순서대로 살펴보고, 더미 노드인 경우 문자열 뒤에 0을 추가하고, 더미 노드가 아닌 경우 문자열 뒤에 1을 추가합니다. 마지막으로 문자열에 저장된 이진수를 십진수로 변환합니다. 문제의 예시인 42를 설명해보자면, 42를 이진수로 변환하면 101010이 됩니다. 이는 완전이진포화트리가 아니기에 0101010으로 변환됩니다. 하위 리프노드에 더미노드가 추가 되야 했지만, 카카오 예시에선 생략되어 있는 모습입니다. 문제 해결 방법 설명하기 1. 이진수를 포화 이진트리로 만들 수 있어야 합니다. 주어진 정수를 이진수로 변환하여 포화 이진트리를 만드는 것이 요구되고, 이때 0을 삽입해야 합..

서론로봇이 미션을 수행하고 그 결과를 종합하여 SMS로 사용자들에게 전달해야 하는 업무가 있었습니다. 단순한 전달이 아닌 각 공장 관리자들의 성격과 특성이 다르기 때문에, 해당 공장 담당자의 미션 결과를 다른 공장 담당자가 보는 것에 대한 거부감이 있었고, 이런 문제들 때문에 로봇이 수행한 미션별로 수신자가 달라져야 했습니다. 이 글은 이러한 문제를 해결하기 위한 개발 과정을 자세히 다를 예정이며,이를 위해 요구 사항 분석, 아키텍처 설계, DB 모델링, 알고리즘 구현 등의 작업을 수행한 결과를 공유할 것입니다.요구사항 분석SMS 예약 미션 알고리즘 개발을 위해 먼저 요구사항을 분석하였습니다. 기본적으로 로봇이 수행한 미션 결과들을 종합한 SMS를 사용자가 원하는 시간에 받아보고 싶다는 요구사항이 있었습..

🚀 1. 개요문제 해결의 필요성기존의 시나리오 기반 상태 전이 방식은 외부 간섭(사람의 통행, 예기치 못한 문 상태 변화 등)에 취약했습니다. 로봇이 외부 간섭으로 인해 미션을 수행하지 못하는 경우가 발생하여 보다 견고한 시스템의 필요성이 요구되었습니다.제안하는 해결 방법데익스트라(Dijkstra) 알고리즘을 이용한 상태 기계(State Machine)를 구현하여, 현재 문의 상태에서 목표 상태까지 최소 비용의 상태 전이 경로를 탐색합니다. 이를 통해 로봇이 외부 간섭에도 안정적으로 미션을 수행할 수 있도록 했습니다.⚠️ 2. 문제 정의문제 상황 설명로봇이 정해진 waypoint에 도착하면 ROLL-UP DOOR의 상태를 확인하기 위해 아두이노와 통신합니다. 로봇은 초기 상태 정보를 받으면 이를 통해 ..

[문제 설명] 주어진 작업을 처리하기 위한 여러 개의 코어가 있는 CPU가 있습니다. 각 코어는 작업을 처리하는 시간이 다르고, 작업이 끝나면 작업이 없는 코어가 다음 작업을 수행합니다. 처리해야 할 작업의 개수와 각 코어의 처리 시간이 주어질 때, 마지막 작업을 처리하는 코어의 번호를 반환하는 함수를 작성해야 합니다. [해결 방법] 우선 이 문제를 풀기 위해선 모든 작업들이 코어에 할당되는 최소 시간을 찾아야 합니다. 이를 빠르게 찾기 위해 이분탐색을 사용했습니다. 구체적인 해결 방법은 아래와 같습니다. 이분 탐색을 통해 최소 시간을 구합니다. (최소 시간 - 1)을 하여 해당 시간에 코어가 처리하고 있는 작업의 수를 파악합니다. (코어 시간 % 최소시간 == 0)이면 해당 시간에 코어에 작업을 할당할..

[문제 설명] 출발지에서 목적지까지 최단거리로 이동하는 경우를 구하는 문제입니다. [해결 방법] 해당 문제는 BFS를 사용해 풀이하는 문제입니다. BFS를 이용한 빠른 길 찾기는 출발점으로부터 인접 노드들의 최단거리를 갱신하는 구조입니다. 이 때, 출발점이 하나이고 목적지는 x개일 수 있습니다. 주어진 예시를 보면 출발점은 x개인 반면에 도착점은 하나로 고정되어 있습니다. 즉, 도착점을 출발점으로 생각하여 인접 노드들의 최단거리 노드를 갱신하면 도착점에서부터 출발점까지의 최단거리를 구할 수 있습니다. 결과적으로 도착점을 출발점으로 탐색을 진행한다면 도착점에서 출발할 수 있는 모든 노드들의 최단거리를 구할 수 있습니다. sources 배열에 있는 노드들의 최단거리를 return하여 정답을 받을 수 있습니다..

람다는 람다(lambda) 함수는 파이썬에서 익명 함수(anonymous function)를 만들기 위해 사용됩니다. 익명 함수란 이름이 없는 함수로, 일회성으로 사용될 때 유용합니다. 장점 람다 함수의 장점은 메모리 절약에 있다. 함수를 생성자를 통해 생성하는 방법은 간단하게 다음과 같이 표현될 수 있습니다. my_func = function(code, globals[, name[, argdefs[, closure]]]) 코드와 이름을 담아서 함수클래스를 통해서 객체를 생성하고, 그 객체를 함수이름과 동일한 변수에 담는 과정을def키워드가 대신해 줍니다. 함수객체를 변수에 담은 시점에서, 함수객체는 메모리에 올라가서 변수를 통해 자신이 호출되기를 기다리게 되기에 단 한 번만 사용할 함수라면 불필요한 메..

[문제 설명] 인센티브를 받는 사람 중 완화가 몇 등인지 구하는 문제였다. 인센티브를 받을 수 있는 조건은 다음과 같다. 사원.근무태도 >= 사원들.근무태도 or 사원.동료평가 >= 사원들.동료평가 둘 중에 하나라도 높은 것이 있다면 인센티브를 받을 수 있다 [해결 방법] 주어진 예시(sources = [[x, y], [x,y]...])를 도식화 시키면 아래와 같은 모습이 나타나게 된다. 여기서 빨간색 부분은 인센티브를 받을 수 없는 사람들의 영역을 나타낸다. 아래의 사진을 보면 두 가지의 특징을 획득할 수 있다 x의 크기 순서 및 만약 x의 크기가 같으면 y 값이 작은 사람부터 인센티브의 여부를 우선적으로 판별할 수 있다. x가 0으로 가까워 질 수록 y 값이 커지는 특징을 확인할 수 있다. 왜냐하면 ..

SET이 빠른 이유 set은 데이터를 해싱하여 내부적으로 해시 테이블에 저장합니다. 해시 테이블의 경우 해시 함수를 주어진 입력에 대해서 해시 키 값이 존재하기에 인덱싱이 매우 빠르다. 또한 파이썬의 set은 내부적으로 c언어로 구현되어 있어 파이썬 인터프리터보다 빠르다. 또한 set은 중복을 허용하지 않기에 데이터의 크기가 작아져서 해시테이블의 충돌을 방지하며 연산 속도를 향상시킨다 따라서 set은 대용량 데이터를 다룰 때에도 빠른 속도를 보장할 수 있다. 하지만, set은 해시 함수의 충돌(Collision) 문제를 고려해야 한다. 충돌은 서로 다른 두 개의 키가 동일한 해시값을 가질 때 발생합니다. 충돌이 발생하면 set은 해시 테이블에서 다른 곳에 해당 요소를 저장합니다. Set에서 사용되는 해시..

아이디어 도출 방법 주어진 문제는 search배열(n)에서 특정 숫자(m)를 찾는 문제였다. 하지만 배열의 길이가 크고, 찾고자 하는 특정 숫자가 많아지면 이중반복문으로는 해결하기 어렵다. 따라서 이중 반복문을 제거하고, 주어진 배열에서 더 빠르게 탐색할 수 있는 알고리즘이 필요한데 이것이 이분 탐색이다. 이분 탐색은 기존의 O(n)의 시간 복잡도를 O(logn)으로 줄여준다. 이런 방법을 사용한다면 기존의 O(n*n)의 시간 복잡도에서 O(nlogn) + O(mlogn)으로 개선할 수 있다. 또한 이분 탐색을 하기 전 필수적으로 수행되어야 할 것은 '특정 배열'(주어진 숫자를 찾고자 하는 배열)이 정렬되어 있어야 한다. 최종 결과 n = int(input()) search = list(map(int, ..

문제 설명 택배차의 창고 크기가 한정되어 있어 어떤 순서로 택배를 배달하고, 수거하면 택배 차의 움직임을 최소로 할 수 있을까? 아이디어 주어진 조건이 아래의 그림과 같을 때, 택배차가 최소로 움직이는 경로는 1. #4, 5번 집에 택배를 배달하고 돌아오는 길에 #4집의 택배를 수거 2. 그 후 창고로 돌아와 다시 #1,3 번 집에 택배를 배달하고 #2번 집의 택배를 수거 3. 총 16번의 움직임으로 해결할 수 있다. *여기서 부터 설명은 아래 그림 기준으로 설명함* 여기서 중요한 아이디어는 창고에서 출발할 때는 풀 CAP으로 적재하고, 배달이나 수거하하는 순서를 멀리있는 집을 기준으로 삼아야 한다. 항상 택배차 용량만큼 적재해야 하는 이유는 수거해야 하는 집(집 #5)이 배달해야하는 집(집 #4)보다 ..