일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 구현
- 카카오
- ai agent
- dau 3만명
- 셀러리
- gRPC
- next-stock
- 디버깅
- ipo 매매자동화
- 추천 검색 기능
- langgraph
- 누적합
- 크롤링
- 프로그래머스
- JPA
- 백준
- 결제서비스
- 이분탐색
- piplining
- 알람시스템
- 관측가능성
- docker
- spring event
- BFS
- 아키텍쳐 개선
- 베타적락
- 완전탐색
- 쿠키
- AWS
- 몽고 인덱스
- Today
- Total
목록개발/알고리즘 (53)
코딩관계론
문제 이해하기비밀 코드는 1 ~ n 사이의 서로 다른 5개의 수로 구성된 오름차순 조합입니다.총 m번의 시도를 통해 비밀 코드를 추측할 수 있으며, 매 시도마다 서로 다른 5개의 수를 입력합니다.시스템은 각 시도에 대해, 입력값 중 몇 개가 비밀 코드에 포함되어 있는지를 알려줍니다.예를 들어, 비밀 코드가 [3, 5, 7, 9, 10]이고우리가 [1, 2, 3, 4, 5]를 입력했다면,겹치는 수는 3과 5, 총 2개이므로 시스템은 2를 응답합니다문제 해결 방법 설명하기가능한 모든 5개 조합을 생성합니다. (1 ~ n 중 5개 선택)각 조합이 모든 시도의 결과와 정확히 일치하는지 확인합니다.조건을 모두 만족하는 조합만을 필터링하여 개수를 셉니다.코드function getCombinations(arr, se..
문제 이해하기next 연산이 있을 시 + 10초 prev 연산이 있을 시 - 10초 다만 최소 0초에서 최대 video_len 까지만 이동이 가능함오프닝 구간에 있을 경우에는 오프닝의 마지막 시간으로 이동해야 한다.문제 해결 방법 설명하기1. 초로 통일 코드function changeSec(time){ let [min, sec] = time.split(':').map(Number) return min * 60 + sec}function secToMin(time){ min = Math.floor(time / 60) sec = time % 60 if(min 코드 리뷰function toSeconds(time) { const [minute, second] = time.split(..
1. 문제 이해하기게임 속 "붉대 감기" 기술은 일정 시간 동안 체력을 회복하는 스킬입니다. 주요 규칙은 다음과 같습니다:기본 회복: 매 1초마다 정해지는 양(x)만큼 체력을 회복합니다.연속 성공 보너스: t초 동안 끊기지 않고 성공하면 추가 회복량(y)이 더합됩니다.기술 취소: 목시터에게 공격받으면 붉대 감기가 즉시 취소되며, 공격받는 순간에는 회복을 할 수 없습니다.체력 한계: 체력은 최대 체력을 넘어서 회복할 수 없습니다.사망 조건: 체력이 0 이하로 떠나면 캐릭터가 죽습니다.📌 문제 링크 바로 가기2. 문제 해결 방법해결 해적은 목시터 공격 간격을 계산해서 그 사이에 체력을 얼마나 회복할 수 있는지를 구하는 것입니다.현재 시간과 다음 공격 시간사이에 회복할 수 있는 시간을 구합니다.회복 공식은 ..
문제 이해하기간단하게 생각하면 두 저울의 합을 같게 맞추는 문제로 한 저울에서 다른 저울로 값을 옮겨가다 보면 같게 맞춰진다. 문제 해결 방법 설명하기1. 큐1에 있는 원소들의 합과 큐2에 있는 원소들의 합을 비교2. 더 큰 값의 큐에서 더 작은 큐쪽으로 원소를 이동하면 됨3. 문제 예시의 3번 조건을 보면 항상 같을 똑같이 만들 수 있는 것이 보장되지 않기 때문에 최대 경우의 수가 넘어가면 -1을 반환해야 함코드from collections import dequedef solution(q1, q2): t1_sum = sum(q1) t2_sum = sum(q2) q1 = deque(q1) q2 = deque(q2) answer = 0 max_try = len(q1)..

문제 이해하기문제가 총 두가지가 있다. 하나는 json파일을 읽어 고객의 tag와 username을 오름차순으로 반환하는 것과 쿼리파라마으로 tag와 username이 주어지면 승률을 반환하는 형식이다. json파일로 고객의 정보가 아래의 형태로 나타난다. { "id": 1, "username": "wt7Py", "tag": "bOCv", "win": 617, "lose": 875 } 문제 해결 방법 설명하기1. 고객의 username과 tag로 정렬하는 방법내가 사용한 방법은 읽어온 json파일에서 tag와 username만 따로 저장한 후 해당 값들을 key로 잡아서 정렬하는 것이었다.@app.route("/api/gamerec..

문제 이해하기 선영이라는 친구가 새로운 함수를 만들었는데, 해당 함수는 "R"과 D로만 이루어져있다.R은 reverse고 d는 delete다. 즉 R을 만나면 배열을 뒤집어야 하고, D를 만나면 해당 배열에서 젤 처음 숫자를 삭제해야한다.문제 해결 방법 설명하기1. R을 만나면 배열을 역순으로 변경해야할까?그렇다 R을 만날 때 마다 매번 배열을 역순으로 변경한다면 시간초과가 나타난다. 따라서 우리는 배열이 뒤집어 졌다는 것을 기억하고, 실제로 연산은 수행하지 말아야 한다. for f in funcStr: if f == "R": direction = not direction 2. D를 만나면 배열에서 삭제를 진행해야 할까?D의 연산의 경우 실제로 수행해도 상관은 없다 ..

문제 이해하기조교들이 새로운 보안 시스템을 설치하기로 했습니다. 이 시스템은 알파벳 소문자로 이루어진 암호를 사용하며, 최소 한 개의 모음과 최소 두 개의 자음이 포함되어야 합니다. 또한 알파벳은 증가하는 순서로 배열되어야 합니다. 주어진 C개의 문자로 가능성 있는 암호를 구하는 프로그램을 작성해야 합니다. 문제 해결 방법 설명하기1. 모든 알파벳을 조합해야 합니다.아래의 코드를 사용하면 모든 조합을 구할 수 있습니다.def possible_passwords(length, num_chars, characters): results = [] combinations_list = list(combinations(characters, length)) 2. 조건검사만들어진 문자열 조합에서 모음과 자음의..

문제 이해하기주어진 쿼리가 있고, 그 중에 몇 개의 월드가 매칭되는지 찾는 문제였다.참고로 필자는 틀렸고, 어떤 접근 방법을 통해서 틀렸는지 설명하고 풀이법을 설명하겠다.틀린 문제 해결 접근 과정1. 경우의 수 검색하기문제의 경우의 수를 보면 주어진 word의 길이는 100,000이고 word[x]의 길이는 최대 10,000이 된다.따라서 word를 하나씩 분리하면 해결이 가능하지 않을까 싶었다. 왜냐하면 분리에 N*M의 경우의 수만 사용하면 됐기 때문이다예시f????fr???fro??frod?????o???do.....????? 그 후 분리된 값들을 아래와 같은 방식으로 캐시에 저장하고 쿼리 배열 탐색을 cache에 찾아서 꺼내는 방식이었다.cache['fr???] += 1하지만 효율성4, 5에서 시간..

문제 이해하기n이 주어지면 그 중에 올바른 괄호쌍이 몇 개 있을 수 있는지 찾는 문제였다.올바른 괄호쌍이란 ()()()와 같이 모두 닫친 괄호를 의미한다.문제 해결 방법 설명하기1.가지치기n이 28(14 * 2)이기 때문에 완전탐색은 제한시간 내에 풀 수 없다. 따라서 시간을 줄이기 위해서 DP를 선택하던가 탐색하지 않아도 실패하는 경우를 발견해서 탐색을 줄여야 한다. 필자는 가지치기를 선택했고, 그 조건에 탐색 시점에서 남은 '(' 의 개수가 남은 ')'의 개수보다 많다면 탐색을 멈추도록 했다. 왜냐하면 닫친 괄호가 더 적게 남았다면 '(())))" 다음과 같은 상황이기 때문이다. if left_bracket > right_bracket: return 0 2. 완전탐색또한 항상 남..

문제 이해하기이동하는 방향이 담긴 배열이 주어질 때, 방의 갯수를 return하는 문제였습니다. 문제 해결 방법 설명하기1. 닫친 방이란?닫친 방을 생각해본다면 이미 방문한 정점에 다시 한번 방문 했을 때 닫친 방이라고 생각할 수 있다.하지만 주의할 점은 다시 방문한 정점은 이전에 사용되지 않은 edge로 부터 진입해야 한다는 점이다. 2. 배열의 확장 배열의 확장은 왜 필요한가.4각형 배열이기 때문에 중간 정점은 생각하지 못하게 된다.따라서 배열의 확장을 통해 중간 정점을 표현할 수 있게 만들어줘야 닫친 방을 모두 찾을 수 있게 된다. 코드from collections import dequedef solution(arrows): answer = 0 visited = {} dir = {}..

문제 이해하기삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 하시오. https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 해결 방법 설명하기1. 최대값을 찾는 방법최대값이 되는 경로를 찾기 위해서는 모든 가능한 경로를 탐색해야 합니다. 그러나 모든 경로를 매번 계산하려고 하면 제한된 시간 내에 문제를 해결할 수 없습니다. 따라서 이전에 저장한 정보를 활용하는 방법이 필요합니다. 제가 선..

문제 이해하기부분 펄스가 있는데 해당 부분 펄스를 적용하고 나서 가장 큰 합을 가지는 부분 수열의 값을 찾는 문제였다. https://school.programmers.co.kr/learn/courses/30/lessons/161988 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 해결 방법 설명하기 1. 가장 큰 부분 수열이 되려면?가장 큰 부분 수열을 찾기 위해서 크게 두 가지 방법이 있다. 하나는 이중 for문을 이용해서 가장 큰 값을 갖는 부분 수열을 찾을 수 있을 것이다. 하지만 sequence 배열의 길이를 보면 해당 방법은 불가능하다. 따라..