알고리즘 문제풀이
-
[프로그래머스 level 2] 프린터알고리즘 문제풀이/JavaScript 2020. 1. 14. 21:34
문제 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알고 ..
-
[프로그래머스 level 2] 탑 문제풀이알고리즘 문제풀이/JavaScript 2020. 1. 13. 23:10
문제 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다. 송신 탑(높이..
-
[프로그래머스 Level 1] 약수의 합알고리즘 문제풀이 2020. 1. 7. 21:13
문제 설명 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 이 문제는 비교적 해결하기 쉬운 문제였지만, for문의 반복 범위를 고려하지 않으면 시간초과로 실패할 수 있는 문제이다. 해답은 [프로그래머스 Level 1] 소수찾기와 동일하다. 어떤 수 n은 n의 제곱근 이하의 수와 그 이상의 수의 곱으로 표현이 가능하다. 그러므로 i를 n의 제곱근까지만 반복해주면 이 문제를 시간복잡도 O(root n)으로 해결 가능하다. function solution(n) { var factor = new Set(); if(n == 0){ return 0; } for(var i ..
-
[프로그래머스 Level 1] 소수찾기알고리즘 문제풀이 2020. 1. 7. 20:37
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상 1000000이하의 자연수입니다. 입출력 예 n result 10 4 5 3 위 문제를 처음 접했을 땐 평범한 소수찾기 문제인 거 같아서 매우 쉽다고 생각을 했다. 근데 범위 내에서 소수를 구하는 문제이기 때문에 에라토스테네스의 체를 활용하는 게 좋겠다는 생각이 들었다. 그럼 한 번 구현해보자. function solution(n){ var answer = Array(n+1).fill(1); // ㉠ answer[1] = 0; answer[0] = 0; for(var j = 2; j