목록프로그래머스 알고리즘/2단계 (62)
N
programmers.co.kr/learn/courses/30/lessons/42583 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이 programmers.co.kr 큐를 이용한 풀이. 우선 큐를 다리 길이만큼 선언하여 0으로 초기화 한다. 큐가 빌 때까지 while문을 반복한다. sum은 현재 다리의 올라가 있는 트럭의 무게다. 큐의 맨 앞에 있는 트럭의 무게를 빼주면서 진행. 만약 다리 위에 트럭이 올라가지 못하는 경우는 0을 큐에 넣어준다. 큐가 비게 되면 모든 트럭이 다리를 지나간 경우가 된다. function so..
programmers.co.kr/learn/courses/30/lessons/42587?language=javascript 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 큐를 이용한 풀이. 대기 목록 중 최댓값이 큐의 맨 앞에 있는지 확인하면서, 내가 원하는 작업인지 체크해야 한다. 우선순위에 밀리는 경우 대기 목록의 맨 뒤에 넣으면서 location도 바꿔주면 된다. function solution(priorities, location) { let answer = 0; while(1){ let max = Ma..
programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4 programmers.co.kr 다익스트라를 이용하여 1에서 거리가 K 이하인 마을의 수를 구할 수 있다. #include #include #include #include using namespace std; int solution(int N, vector road, int K) { int answer = 0; vector graph[51]; priority_queue pq; vec..
programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr BFS를 이용해 맵의 최단 거리를 구하는 문제. 상하좌우를 이동하는데 조건을 검사하면서 진행하면 된다. 이동하려는 좌표가 벽이 아니고, 맵의 크기를 벗어나지 않으며 방문하지 않은 곳을 큐에 넣어준다. 만약 다음 좌표가 목적지라면 바로 리턴하여 최단 거리를 구한다. 큐가 빌 때까지 목적지에 도착 못하는 경우는 갈 수 없는 경..
문제 설명 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 c를 2진법으로 표현한 문자열로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 1이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 s의 길이는 1 이상 150,000 이하입니다. s에는 '1'이 최소 하나 이상 포함되어 있습니다. 문자열을 다루는 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/RtnPw/btqKPCfprMw/WFwKhJhxkzMEci2tp7iSWK/img.png)
문제 설명 0과 1로 이루어진 2n x 2n 크기의 2차원 정수 배열 arr이 있습니다. 당신은 이 arr을 쿼드 트리와 같은 방식으로 압축하고자 합니다. 구체적인 방식은 다음과 같습니다. 당신이 압축하고자 하는 특정 영역을 S라고 정의합니다. 만약 S 내부에 있는 모든 수가 같은 값이라면, S를 해당 수 하나로 압축시킵니다. 그렇지 않다면, S를 정확히 4개의 균일한 정사각형 영역(입출력 예를 참고해주시기 바랍니다.)으로 쪼갠 뒤, 각 정사각형 영역에 대해 같은 방식의 압축을 시도합니다. arr이 매개변수로 주어집니다. 위와 같은 방식으로 arr을 압축했을 때, 배열에 최종적으로 남는 0의 개수와 1의 개수를 배열에 담아서 return 하도록 solution 함수를 완성해주세요. 제한사항 arr의 행의..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dpfV55/btqIPQGOYJb/qRMHo5e5BYKNDM8E9KdGGk/img.png)
문제 설명 정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 1,000 이하입니다. for문과 switch문을 이용하여 2차원 배열에 삼각 달팽이를 만든다. 수를 채워 나갈 때 방향이 꺽이는 횟수가 n과 같으므로 0 ~ n까지 for문을 반복. state 변수를 이용하여 0 = 아래로 채우는 방향, 1 = 오른쪽으로 채우는 방향, 2 = 위로 채우는 방향을 설정한다. switch문에서 state를 이용하여 각 케이스 별로 수를 채워나간다. i ~ n까지 반복. 0인 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cyHzOS/btqEt5pdKPM/BGK1ciingYTo1ihxb4NMPk/img.png)
간단하게 풀 수 있는 문제다..! 우선 while문으로 계속 반복한다. a = (a / 2) + (a % 2) b = (b / 2) + (b % 2) 를 넣어주도록 한다. 그러면 이겼을 때 다음 라운드에서 받을 수 있는 차례가 나오게 된다. 만약 a와 b가 같다면 현재 라운드에서 만나는 것이므로 answer을 리턴해주면 끝..! #include using namespace std; int solution(int n, int a, int b) { int answer = 0; while(1) { a = (a / 2) + (a % 2); b = (b / 2) + (b % 2); answer++; if(a == b) return answer; } }