본문 바로가기

Algorithm/Programmers37

[고득점 Kit(스택/큐)] 주식가격 (Python) 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 풀이 입력으로 주어진 prices를 차례대로 스택에 push한다. 스택에는 (가격, 스택에 push된 시간)과 같은 튜플 형태로 넣어줬다. 여기에서 시간은 인덱스와 같은 의미를 지닌다. 스택에 넣기 전에 스택의 top에 있는 주식의 가격과 비교한다. 현재 스택의 top에 있는 주식 가격보다 현재 주식의 가격이 낮을 경우에는 스택에서 해당 주식을 pop을 통해 제거한다. 제거하면서 answer 배열에 '현재 시간 - 스택에.. 2022. 1. 19.
[고득점 Kit(스택/큐)] 다리를 지나는 트럭 (Swift, Python) 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr 풀이 입력으로 주어진 트럭들을 순서대로 bridgeQueue에 append한다. 현재 다리에 있는 모든 트럭의 무게를 합한 값에 지금 다리로 진입해야 하는 트럭의 무게가 합해졌을 때 제한 무게를 넘지 않는지 체크한다. 만약 넘지 않을 경우에는 다리에 트럭을 진입시키는데 이때 (트럭의 무게, 다리에 진입한 시간)의 형태로 bridgeQueue에 넣어줬다. 만약 무게 제한을 넘어설 경우에는 bridgeQueue에서 가장 먼저 들어온 트럭을.. 2022. 1. 18.
[고득점 Kit(스택/큐)] 프린터 (Swift, Python) 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 풀이 총 3개의 스택/큐를 만들었다. 인쇄해야 하는 큐(a) : 인쇄해야 하는 문서들이 들어있는 큐 인쇄 순서를 담아두는 큐(b) : 우선순위에 따른 인쇄 순서를 담아두는 큐. 임시 pool(c) : b에서 우선순위에 밀려 다음으로 미뤄진 리스트를 임시로 저장하여 a에 넣어주기 위해 사용되는 큐 a는 입력으로 주어진 인쇄 리스트를 의미한다. 차례대로 앞에서부터 b에 담아주는데 만약 b에 가장 뒤쪽에 있는 문서에 비해 우선순위가 높은지 낮은지 체크한다. 만약 b에 있.. 2022. 1. 17.
[고득점 Kit(스택/큐)] 기능개발 (Swift, Python) 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 풀이 입력으로 주어진 progresses를 순차적으로 탐색하며 작업 진도가 얼마나 남았는지를 체크한다. 현재 작업을 배포하기 위해서 며칠이 필요한가를 체크하고 다음 작업이 해당 일 수만큼 작업했을 때 배포가 가능한지 체크한다. 배포가 불가능한 작업을 만날때까지 카운트를 하고 불가능한 작업을 만나면 다시 새롭게 위 과정을 반복한다. 코드 [Swift] import Foundation func solution(_ progresses:[Int], _ speed.. 2022. 1. 15.
[고득점 Kit(탐욕법)] 단속카메라 (Python) 코딩테스트 연습 - 단속카메라 [[-20,-15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 풀이 차량의 진입/전출에 따른 범위를 그림으로 그려서 판단하면 쉽게 해결 가능하다. 먼저 입력으로 주어진 routes를 전입을 기준으로 오름차순 정렬을 한다. 그 후 다음과 같이 경우를 나누어 for문을 돌면서 이에 맞게 처리를 해주면 된다. 먼저 처음 차량의 범위에 단속카메라를 설치한다고 가정하고 시작한다. 참고로 카메라의 설치 범위에서 시작 부분은 따로 신경쓰지 않는다. 어차피 정렬을 하고 나면 진입 지점은 항상 뒤일 것이기 때문에 카메라의 설치 범위 역시 그에 맞춰서 좁아진다고 생각하면 된다. (1) 다음 차량의 진입 지점(nowStart)이 이전 차량의 전출.. 2022. 1. 3.
[고득점 Kit(탐욕법)] 섬 연결하기 (Swift, Python) 코딩테스트 연습 - 섬 연결하기 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr 풀이 섬을 연결할 때 일단 가장 적은 비용의 다리를 먼저 사용해야 하므로 입력으로 주어진 costs를 비용을 기준으로 오름차순 정렬을 한다. 그 후 차례대로 다리를 사용해가면서 이미 연결된 두 섬에 대한 다리인지를 체크한다. 이미 두 섬이 연결되어 있으면 해당 다리를 사용하지 않고 넘어간다. 다리를 사용할때마다 몇 개의 다리를 사용했는지 체크한다. n개의 섬이 모두 연결되기 위한 최소 다리 개수는 n-1개이기 때문에 다리가 n-1개가 사용됐다면 탐색을 종료한다. 코드 [Swift] import Foundation var edges: [[Int]] = Array.. 2022. 1. 2.