일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 백준 16235
- sql 기술면접
- 백준 파이썬
- Kotlin
- spring oauth
- Spring
- spring security
- MSA
- 프로래머스
- 백준 17779
- spring cloud
- springboot
- JPA
- 백준 16236
- Spring Boot
- 백준
- 파이썬
- 웹어플리케이션 서버
- with recursive
- JVM
- MySQL
- 백준 16719
- java 기술면접
- 백준 17626
- 백준 19238
- Coroutine
- java
- 백준 15685
- re.split
- Today
- Total
목록알고리즘 (178)
시작이 반
구현 문제이다. 준현이는 현재 가진돈에서 주식을 살 수 있으면 살 수 있는 개수만큼 전량 매수하고 팔지 않는다. 성준이는 가격이 연속으로 3일 하락하면 해당 날에 주식을 전량 매수한다. 또한 가격이 연속으로 3일 상승하면 해당 날에 주식을 전량 매도한다. 마지막 날에 남은 돈과 주식을 갖고 있는 개수를 구하여 서로 비교한다. money = int(input()) stocks = list(map(int,input().split())) def jun(): left_money = money stock_n = 0 for stock in stocks: stock_n += left_money // stock left_money = left_money % stock if left_money == 0: break re..
다익스트라 알고리즘이다. 다익스트라 알고리즘은 edge의 가중치가 양수만 있을때 사용할 수 있다. 2가지 방법으로 풀 수 있다. 1. 해당 노드에서 이어진 노드들중 가중치가 가장 작은 경로를 선택한다. 2. 우선순위 큐를 사용하여 해결할 수 있다. 우선순위 큐를 이용하여 풀었다. (가장 작은 가중치를 선택해야함) 파이썬에서는 우선순위 큐를 사용하기위해 heapq를 사용할 수 있다. (동작은 min heap인듯 하다) 다익스트라를 풀기위해 필요한 것들 1. 우선순위 큐에 사용될 list ( queue = list() ) 2. 가중치를 저장할 list ( distance = list() ) 세팅 distance[시작점] = 0 우선순위 큐에 (해당 점의 가중치, 해당점) 을 넣는다. queue가 빌때까지 반..
programmers.co.kr/learn/courses/30/lessons/72412
programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 조합, 사전 관련 문제이다. course 수에 따른 조합을 구하여 사전에 넣는다. from itertools import combinations def solution(orders, course): answer = [] for cour in course: menus = dict() temps = list() for order in orders: temps.extend(list(..
programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 정규 표현식 이용 import re def solution(new_id): #1단계 answer = new_id.lower() #2단계 answer = re.sub('[~!@#$%^&*\(\)=+\[\{\]\}:?,\/]', '', answer) #3단계 answer = re.sub('\.+', '.', answer) #4단계 if answer: if answer[0]..
문제를 이해를 못했다.. 출력에 첫째 줄에 가장 인접한 두 공유기 사이의 최대 거리를 출력한다. 라고 써있는데 인접한 두 공유기 사이 최대 거리가 뭔소린지 몰라서 문제부터 이해했다... 이해한 내용) 공유기 개수 3 좌표 : 1 2 4 8 9 만약 거리 = 2 라면 1에 설치하면 1+2 = 3 -> 다음 설치할 공유기 위치는 3이상인 좌표이다. 2에는 설치 못한다. 4에 설치 4+2 = 6 -> 다음 설치할 공유기 위치는 6이상인 좌표이다. 8에 설치 8+2 = 10 -> 다음에 설치할 공유기 위치는 10이상인 좌표이다. 9에는 설치 못한다. 끝----- 설치한 공유기 개수 3개 거리가 2일때 만족 만약 거리 = 3 라면 1에 설치하면 1+3 = 4 -> 다음 설치할 공유기 위치는 4이상인 좌표이다. 2..
나무를 0미터를 가져갈 수 도있고 최대 높이를 가져갈 수도있다. 즉 절단기의 길이는 최대 높이를 자르려면 맨 밑동을 잘라야한다 -> 0 0미터를 가져간다면 가장큰 높이의 나무만큼 절단기 높이를 설정한다 -> max(trees) n, m = map(int, input().split(' ')) trees = list(map(int, input().split(' '))) def binary(): left = 0 right = max(trees) while left 0: height += tree - mid if height >= m: # 잘린 길이가 구하려는 것보다 크면 더 큰높이로 자르기 left = mid + 1 elif height < m: # 잘린 길이가 구하려는 것보다 작으면 더 작은 높이로 자르기 ..
이진탐색 풀이 첫 풀이 방법은 이진탐색을 한뒤 찾으려는 숫자가 있으면 count + 1을 해주고 해당 숫자를 list에서 remove한뒤 다시 그 숫자를 이진탐색하는 방식으로 하였다. 당연하게 시간초과가 나왔다. 두번째 풀이 방법은 찾고자 하는 숫자의 index를 이진탐색으로 찾고 그 index에서 양쪽으로 찾으려는 숫자가 있는지 반복문으로 확인하는 방식으로 하였다. 이또한 시간초과가 나왔다 list에 모든 숫자가 찾고자 하는 숫자이면 반복문이 엄청나게 돌아간다. 최종 풀이방법은 mid에 찾고자 하는 숫자가 나와도 이진탐색을 끝내지 않고 계속 나눠주면서 찾고자 하는 숫자의 양쪽 마지막 index를 반환한다. 2번의 이진탐색을 한다 n = int(input()) cards = list(map(int, in..