알고리즘

알고리즘

프로그래머스 JS | 2 x n 타일링 ( feat.시간초과 )

위 문제는 피보나치 수열을 사용하면 쉽게 해결할 수 있다. 구글링 해보면 풀이방법과 해답 코드를 쉽게 찾을 수 있으니 문제 풀이는 넘어가려고 한다. ❌ Solution ( 85 / 100 ) 정확성 70, 효율성 15 function solution(n) { let answer = 0; const dp = Array(n-1).fill(0) dp[0] = 1 dp[1] = 2 for(var i = 2; i < n; i++){ dp[i] = (dp[i-1] + dp[i-2]) % 1000000007 } return dp[n-1]; } 피보나치 수열을 구현하기 위해 위처럼 코드를 작성했는데, 효율성 테스트를 통과하지 못했다. 구글링을 해보면 상위에 노출되는 여러 코드 역시 마찬가지였다. ✅ Solution (..

알고리즘

백준 JS | 1004번: 어린왕자

출처 : 백준 온라인저지 - 1004번: 어린왕자 로직을 구하기 전에 먼저 점과 점 사이의 거리 공식을 알아야 한다. 좌표평면 위의 두 점 A(x, y), B(x1, y1) 가 존재한다고 할 때, 이 두 점 사이의 거리 d 는 아래와 같은 공식을 사용하여 구할 수 있다. 입력값에서 가장 첫 번째로 오는 테스트 케이스의 갯수 T 값을 구한다. 나머지 input값 데이터에서 가장 처음 오는 데이터는 좌표 값이므로 coordinate 값에 할당하고 각 테스트케이스에 주어지는 행성의 갯수를 n 값에 할당한다. 주어진 행성의 갯수만큼 테스트를 진행하기 위해 배열을 0부터 n까지 잘라내고 원의 중점과 출발점, 도착점의 각 거리를 구하고 그 결과값을 비교한다. 중점과 각 점의 거리가 원의 반지름보다 크거나 같다면 t..

알고리즘

프로그래머스 JS | 인사고과

❌ Solution (48 / 100 ) 프로그래머스에서는 백준과 달리 이전에 제출했던 코드를 확인할 수 없어, 생각했던 로직만 서술하고 넘어가기로 했다. 1. 재귀함수를 사용하여 각 사원별로 모든 사원들과 비교하여 근무 태도 점수와 동료 평가 점수의 총합을 비교하여 임의의 사원보다 두 점수가 모두 낮은 경우, 즉 인센티브 대상자가 아닌 사원들을 제외하고 인센티브 대상자인 사원들로만 이루어진 배열을 새로 만들었다. 2. 이때 완호가 인센티브 대상자가 아닐 경우에 한하여 -1을 return 하고, 3. 그렇지 않은 경우 인센티브 대상자 배열을 반복문을 사용하여 index 값이 1인 인자부터 index 값이 0인, 가장 첫 번째에 위치하는 인자와 두 점수의 합을 비교하여 index 0의 인자보다 합이 큰 경..

알고리즘

백준 JS | 재귀의 귀재

출처 : 백준 온라인 저지 - 25501번: 재귀의 귀재 ✅ Solution const input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n'); input.shift(); let answer = ''; // 1. 주어진 문자열이 팰린드롬인지 확인하기 위한 isPalindrome 함수 생성 function isPalindrome(str, cur, cnt) { // 1-1. 팰린드롬 여부를 확인하기 위해서는 index의 역순에 위치한 문자열과 비교해야 하므로 // 결과적으로 문자열의 절반까지만 확인을 하면 된다. => length 변수는 재귀함수를 실행될 마지막 index // 문자열이 홀수이면 중간에 숫자가 하나 비기 때문..

알고리즘

백준 JS | 좌표 압축

1. index 값을 찾기 위해 입력값 내림차순 정렬 배열 만들기 (input 배열과 별도인 arr 배열) 2. 내림차순 정렬된 배열로 index 배열 만들기 ( lineUp 배열 ) 3. 입력값 배열의 값을 index 배열의 index 값으로 바꾸기 ( arr 배열의 값을 lineUp 배열의 값과 비교한 후 그 index 값으로 교체) 4. index 로 교체된 입력값 배열 출력하기 ( index 값으로 교체된 arr 배열을 출력하기) ❌ Solution (시간초과) const input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n') input.shift(); let answer = ''; //1. 좌표 배열 정렬하기 c..

알고리즘

프로그래머스 JS | 다리를 지나는 트럭

❌ Solution ( 14.3 / 100 ) function solution(bridge_length, weight, truck_weights) { const totalTrucks = truck_weights.length; let timer = 0; let load = 0; const onBridge = []; const complete = []; while(totalTrucks !== complete.length) { if( load + truck_weights[0] bridge_length) { const del = onBridge[onBridge.length-1]; if (del !== 0) load = load - del; complete.push(del); onBridge.pop(); } co..

알고리즘

프로그래머스 JS | 소수찾기(완전탐색)

1. numbers 를 가지고 만들 수 있는 조합들을 순열로 result 배열을 만든다. 2. result 배열에서 중복되는 조합과 소수가 아닌 인자들을 삭제한다. 2-1. 중복되는 조합은 Set 을 사용하여 삭제하고, 소수가 아닌 인자들은 isPrimeNumber 함수를 사용하여 삭제한다. 3. result 배열의 길이를 return 한다. 예외처리)) 0부터 시작하는 조합을 제외시켜줘야 한다. 처음에 newFixed[0] !== '0' 을 사용했으나, parseInt 를 사용하는 것이 더 깔금하고 예외 발생 가능성이 적다. 🔺 Solution ( 정확성 75 / 100 ) function solution(numbers) { var result = new Set(); function getPermuta..

알고리즘

프로그래머스 JS | 올바른 괄호

출처 : 프로그래머스 - 코딩테스트 연습 - 스택/큐 - 올바른 괄호 ❌ Solution( 84.8 / 100.0, 정확성: 69.5 효율성: 15.2) 1. 문자열 s의 인자를 반복문으로 체크하는데 열린 괄호일 경우에는 +1, 닫힌 괄호일 경우에는 -1을 한다. 2. 반복문이 끝났을 때 값이 0이라면 올바른 괄호들로 이루어진 문자열이므로 true, 아닌 경우 false를 출력한다. 3. 만약 닫힌 괄호가 맨 처음 온다면 이 문자열을 올바른 괄호로 이루어질 수 없으므로 false를 출력한다. function solution(s){ let chk = 0; for(let i = 0; i < s.length; i++) { if( s[i] === '(') { chk++; } else if( s[i] === ')..

알고리즘

프로그래머스 JS | H-index

출처 : 프로그래머스 - 코딩테스트 연습 - 정렬 - H-index ❌ Solution ( 정확성 6.3 / 100 ) function solution(citations) { let answer = 0; const newArr = citations.sort((a,b) => b-a); for(let i = 0; i = standard) count++; }) if( standard >= count ) answer = standard; } return answer; } 1. h의 최댓값을 찾기 위해 논문을 인용된 횟수 순으로 ..

알고리즘

프로그래머스JS | [1차] 뉴스 클러스터링

출처 : 프로그래머스 - 코딩테스트 연습 - 2018 KAKAO BLIND RECRUITMENT- [1차] 뉴스 클러스터링 ❌ Solution ( 정확성 53.8 / 100 ) function solution(str1, str2) { var answer = 0; const upperStr1 = str1.toUpperCase(); const upperStr2 = str2.toUpperCase(); const arrStr1 = splitEl(upperStr1); const arrStr2 = splitEl(upperStr2); const union = []; const intersection = []; for(let i = 0; i < arrStr1.length; i++) { // 변환된 str1 배열의 인자..

3jun
'알고리즘' 카테고리의 글 목록