본문 바로가기

반응형

전체 글

(168)
[프로그래머스] 숫자 게임 숫자 게임(https://programmers.co.kr/learn/courses/30/lessons/12987) 1. 이해하기 숫자가 큰 쪽이 승리하게 된다. A팀의 출전 순서가 정해져 있을 때, B팀의 최대 승점. 큐를 이용하여 구한다. 2. 구현하기 이 문제를 푸는 아이디어는 다음과 같다. B에 있는 가장 작은 수부터 A의 가장 작은 수와 비교를 한다. 만약 B의 수가 A의 수보다 크면 answer++를 하고 두 수를 큐에서 지운다. 만약 B의 수가 A의 수보다 작다면 B의 수만 큐에서 지운다. Python from collections import deque def solution(A, B): answer = 0 A.sort() B.sort() aQ = deque() bQ = deque() for..
[프로그래머스] 기지국 설치 기지국 설치(https://programmers.co.kr/learn/courses/30/lessons/12979) 1. 이해하기 기존에 기지국이 설치되어 있는 곳도 있고 없는 곳도 있다. 기지국이 설치되어 있는 곳은 w만큼의 지역을 커버한다. 최소의 기지국을 설치하고 모든 아파트에 전파를 전달하려고 한다. 2. 구현하기 기지국이 설치되어 있지 않은 지역의 시작을 start, 기지국이 설치되어있는 곳의 위치를 location이라고 한다면 기지국이 설치되고 전파가 전달되는 곳 중 왼쪽 l은 location-w-1이다. 이 때, 전파가 전달되지 않는 지역의 거리 len은 l-start+1이다. 이를 이용하면 이 구간에 몇개의 기지국을 설치해야하는지 알 수 있다. len/(w*2+1)을 통해 기지국이 몇개가 ..
[프로그래머스] 배달 배달(https://programmers.co.kr/learn/courses/30/lessons/12978) 1. 이해하기 각 마을은 양방향으로 통행할 수 있는 도로가 있다. 각 도로를 지날 때 걸리는 시간은 도로별로 다르다. 배달은 1번 마을에 있는 음식점에서 각 마을로 음식배달을 한다. K 시간 이하로 배달이 가능한 마을에서만 주문을 받으려고 한다. 최단거리 문제. 2. 구현하기 1번에서 시작하는 다익스트라 구현을 통해서 각 마을마다 최단거리를 구한다. Python dijkstra(road,N): 우선순위 큐를 이용해서 다익스트라를 구현한다. 어느 지점과 이어져있는지를 알기 위하여 road를 받고 각 마을마다 거리를 초기화하기 위해서 N을 받는다. 이후 반복문을 이용하여 각 지점의 최단거리를 갱신해준..
[프로그래머스] 야근 지수 야근 지수(https://programmers.co.kr/learn/courses/30/lessons/12927) 1. 이해하기 N시간 동안 야근 피로도를 최소화하도록 일하려고 한다. Demi는 1시간 동안 작업량 1만큼을 처리할 수 있다고 한다. n의 범위와 works의 배열의 길이가 크기 때문에 일반적으로 해서는 시간초과가 나게 된다. heap혹은 binary_search를 이용해서 최댓값을 찾는다. 최댓값을 찾는 이유는 큰 값일수록 제곱의 값이 커지기 때문이다. 2. 구현하기 만약 works에 있는 양이 n값보다 작으면 0을 리턴해준다. 시간안에 모든 일을 처리할 수 있고 야근을 하지 않아도 되는 상황이기 때문이다. heap에 works의 값들을 넣어준다. 이후 n이 0이 될 때까지 최댓값을 찾아서..
[프로그래머스] 방문 길이 방문 길이(https://programmers.co.kr/learn/courses/30/lessons/49994) 1. 이해하기 게임 캐릭터를 4가지 명령어를 통해서 움직인다. U: 위쪽으로 한 칸 D: 아래쪽으로 한 칸 R: 오른쪽으로 한 칸 L: 왼쪽으로 한 칸 캐릭터를 0,0에서 시작하고 경계가 주어진다. 경계에서 벗어난 움직임을 할 경우 명령어를 무시한다. 캐릭터가 처음 걸어본 길의 길이를 구한다. 거쳐간 길을 갈 경우 길이에 포함시키지 않는다. 2. 구현하기 경계에서 벗어난 움직임을 할 경우에는 명령어를 무시한다. 맨 왼쪽 아래를 0,0으로 설정하고 맨 오른쪽 위를 10,10으로 잡는다. Python def out_bound(x,y): return x 10 or y < 0 o..
[프로그래머스] 등굣길 등굣길 1. 이해하기 물에 잠기지 않은 지역을 통해 학교를 가려고 한다. 집에서 학교까지 갈 수 있는 최단 경로의 개수를 1000000007로 나눈 나머지를 반환해야한다. DP문제이다. 2. 구현하기 dfs(x,y,d,m,n,map): 현재 위치 x,y, 온 방향 d를 가지고 map크기가 nxm이다. 현재 위치: x,y, 온 방향: d를 모두 가지고 dp에 저장해야 한다. 그렇지 않으면 dp를 더해주는 부분에서 의도치 않은 값이 더해지게 된다. x,y가 가는 방향에 대해서 문제를 풀어주면 된다. int dfs(int x, int y, int d, int m, int n, vector& map) { if(x >= n or y >= m) return 0; if(map[x][y] == 1) return 0; ..
[프로그래머스] 여행경로 여행경로 1. 이해하기 주어진 항공권을 모두 이용하여 여행경로를 짜려고 한다. 항상 "ICN" 공항에서 출발한다. 방문하는 공항 경로를 배열에 담아 출력한다. dfs문제이다. 2. 구현하기 dfs(here,tickets,visited,tmp,answer,cnt): 현재 위치에서 tickets들을 살펴보면서 출발지가 현재위치이고 아직 방문하지 않은 곳을 방문한다. 이때 방문한다면 cnt를 1 증가시킨다. cnt가 모든 티켓의 수와 같다면 answer에 경로가 담긴 tmp값을 answer에 넣어주고 true를 반환한다. bool dfs(string here, vector& tickets, vector& visited, vector& tmp, vector& answer, int cnt) { tmp.push_b..
[프로그래머스] 예산 예산 1. 이해하기 정해진 총액 이하에서 가능한 한 최대의 총 예산을 배정한다. 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정한다. 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상인 예산 요청에는 모두 상한액을 배정한다. 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정한다. 이분탐색 문제이다. 2. 구현하기 이분탐색을 하기 위해서 요청중 가장 큰 금액을 찾아서 그 금액과 제일 낮은 금액인 1을 비교한다. 상한액을 만들고 이에 맞춰 예산을 계산해본다. 총액과 비교하고 작으면 낮은 금액을 중간 값+1으로, 크면 큰 금액을 중간 값-1으로 바꿔 다시 계산한다. long long l = 1, r = 0; for(int i = 0; i < budgets...