코딩테스트 풀이
-
프로그래머스 코딩테스트 - 단속카메라코딩테스트 풀이 2024. 11. 18. 12:49
문제 설명고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다. 고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요.제약 사항차량의 대수는 1대 이상 10,000대 이하입니다.routes에는 차량의 이동 경로가 포함되어 있으며 routes[i][0]에는 i번째 차량이 고속도로에 진입한 지점, routes[i][1]에는 i번째 차량이 고속도로에서 나간 지점이 적혀 있습니다.차량의 진입/진출 지점에 카메라가 설치되어 있어도 카메라를 만난것으로 간주합니다.차량의 진입 지점, 진출 지점은..
-
프로그래머스 코딩테스트 - 최고의 집합코딩테스트 풀이 2024. 11. 14. 23:15
문제 설명자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다.각 원소의 합이 S가 되는 수의 집합위 조건을 만족하면서 각 원소의 곱 이 최대가 되는 집합예를 들어서 자연수 2개로 이루어진 집합 중 합이 9가 되는 집합은 다음과 같이 4개가 있습니다. { 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 } 그중 각 원소의 곱이 최대인 { 4, 5 }가 최고의 집합입니다. 집합의 원소의 개수 n과 모든 원소들의 합 s가 매개변수로 주어질 때, 최고의 집합을 return 하는 solution 함수를 완성해주세요.제한 사항최고의 집합은 오름차순으로 정렬된 1차원 배열(list, vector) 로 ..
-
프로그래머스 코딩테스트 - 단어 변환코딩테스트 풀이 2024. 11. 12. 17:59
문제 설명두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다.1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변환할 수 있습니다.두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로 변환..
-
프로그래머스 코딩테스트 - 야근 지수코딩테스트 풀이 2024. 11. 11. 11:45
문제 설명회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도를 최소화하도록 일할 겁니다.Demi가 1시간 동안 작업량 1만큼을 처리할 수 있다고 할 때, 퇴근까지 남은 N 시간과 각 일에 대한 작업량 works에 대해 야근 피로도를 최소화한 값을 리턴하는 함수 solution을 완성해주세요.제약 사항works는 길이 1 이상, 20,000 이하인 배열입니다.works의 원소는 50000 이하인 자연수입니다.n은 1,000,000 이하인 자연수입니다.해결 방법아이디어남은 작업량의 편차를 최대한 줄이는 것이 중요하다. 수는 제곱이 될수록 차이가 커기기 때문에 작업..
-
프로그래머스 코딩테스트 - 광물 캐기코딩테스트 풀이 2024. 11. 10. 21:31
문제 설명 제한 사항 해결 방법아이디어광물을 5개씩 쪼개서 저장 => 한 번 곡갱이를 선택하면 5개를 쪼개야 함주어진 곡갱이로 쪼갤 수 있을 만큼의 광물만 저장광물 정렬강한 곡갱이일 수록 강한 광물이 많은 조합에 사용하는 것이 좋음다이아몬드 -> 철 -> 돌 순서대로 정렬다이아몬드 -> 철 -> 돌 곡갱이 순서대로 광물 조합에 사용코드const PICK = ["diamond", "iron", "stone"];const FATIGUE = {diamond: [1, 1, 1], iron: [5, 1, 1], stone: [25, 5, 1]}function solution(picks, minerals) { var answer = 0; const count = picks.map((p, idx) => A..
-
프로그램머스 코딩테스트 - 피코쳇 로봇코딩테스트 풀이 2024. 11. 9. 14:33
문제 설명제한사항해결방법최소 경로를 찾아야 하기 때문에 BFS를 사용하면 될 것 같다.아이디어일단 문자열 배열로 되어 있는 보드를 2차원 배열로 변환BFS를 위한 노드의 위치 정보와 이동 횟수를 담은 큐 배열 생성이미 방문한 노드에 대한 정보를 담은 2차원 배열 생성 (이미 방문한 노드는 큐에 넣어도 최소 경로가 될 수 없음)탐색 진행노드의 위치에서 상하좌우 중 한 방향씩 장애물이나 가장자리까지 이동멈춘 위치가 골이라면 이동 횟수 + 1반환멈춘 위치가 방문한 적 없다면큐에 멈춘 위치 정보와 이동 횟수 + 1 저장방문 정보 저장큐를 끝까지 돌았음에도 골이 아니라면 -1 반환결과 코드function solution(board) { const map = board.map(b => b.split(""));..
-
프로그래머스 코딩테스트 - 과제 진행하기코딩테스트 풀이 2024. 11. 6. 22:26
문제 설명제한사항 해결방법아이디어과제 시작시간 순으로 정렬처음 부여받은 과제를 모두 시작할 때까지 반복지금 진행중인 과제와 새로 시작해야 할 과제 시간 텀 구하기진행중인 과제가 끝나지 않았다면남은 과제 스택에 삽입진행중인 과제가 끝났다면현제 과제를 answer에 삽입남은 과제 스택에서 남은 과제를 꺼내면서 남은 시간만큼 진행할 수 있는 과제 진행다음 과제 진행코드function solution(plans) { var answer = []; const stack = []; plans.sort((a, b) => a[1] left) { stack.push([now[0], nowT - left]); } else { answer.push(now..
-
프로그래머스 코딩테스트 - 연속된 부분 수열의 합코딩테스트 풀이 2024. 11. 5. 23:32
문제 설명비내림차순으로 정렬된 수열이 주어질 때, 다음 조건을 만족하는 부분 수열을 찾으려고 합니다.기존 수열에서 임의의 두 인덱스의 원소와 그 사이의 원소를 모두 포함하는 부분 수열이어야 합니다.부분 수열의 합은 k입니다.합이 k인 부분 수열이 여러 개인 경우 길이가 짧은 수열을 찾습니다.길이가 짧은 수열이 여러 개인 경우 앞쪽(시작 인덱스가 작은)에 나오는 수열을 찾습니다.수열을 나타내는 정수 배열 sequence와 부분 수열의 합을 나타내는 정수 k가 매개변수로 주어질 때, 위 조건을 만족하는 부분 수열의 시작 인덱스와 마지막 인덱스를 배열에 담아 return 하는 solution 함수를 완성해주세요. 이때 수열의 인덱스는 0부터 시작합니다. 제한 사항입출력예시 (성공한 결과는 가장 아래에 있습니다..