-
[코딩 테스트] 프로그래머스 JS 연습 - A로 B 만들기,2차원으로 만들기 ,소인수분해,외계어 사전,삼각형의 완성 조건(2),가까운 수, 공던지기알고리즘/코딩 테스트 2023. 1. 19. 13:16
1. A로 B 만들기
문제 설명문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
function solution(before, after) { const arr = before.split(''); for (let i =0; i < after.length;i++) { arr[arr.indexOf(after[i])] =""; } return arr.join('')===""?1:0; }
처음에 before의 문자열 마지막 인덱스를 0번으로 옮기는 것으로 오해해서 시간이 오래 걸렸다.
이 문제는 순서를 바꿀 수 있으므로 sort문으로 해결하면 좀 더 쉽다.
function solution(before, after) { return before.split('').sort().join('') === after.split('').sort().join('') ? 1 : 0 }
반드시 문자열로 만든 후 일치여부를 확인해야 한다.
arr로 비교하면 원소가 같아도 다른 것으로 판별된다.
2. 2차원으로 만들기
문제 설명
정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.
num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.
function solution(num_list, n) { var c = []; var answer = []; for(let i=0; i < num_list.length;) { c = []; for (let j = 0; j<n; j++) { // console.log(num_list[i] ) c[j] = num_list[i] i++; if (j === n-1) { console.log(c); answer.push(c); } } } return answer; }
arr c를 만들어서 answer에 넣는 것으로 풀었다. c를 초기화 해야 하는 문제점과 arr 변수를 두는 것이 좋은 풀이는 아닌 듯 하다.
function solution(num_list, n) { var answer = []; while(num_list.length) { answer.push(num_list.splice(0,n)) } return answer; }
위 처럼 num_list를 n개씩 잘라 answer에 넣는 것이 더 효율적이다.
3. 가까운 수
문제 설명
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
function solution(array, n) { array.push(n); array.sort((a,b) => a-b); return Math.abs(n - array[array.indexOf(n)-1]) > Math.abs(n - array[array.indexOf(n)+1]) ? array[array.indexOf(n)+1] :array[array.indexOf(n)-1] }
우선 위에 방식으로 풀었는데 좀 복잡하고 가독성이 떨어진다.
4. 공 던지기
문제 설명
머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
function solution(numbers, k) { // // k 반복 규칙 k = (k % numbers.length); // answer 찾기 const arr = [...numbers , ...numbers] return arr.at((k-1)*2); }
arr.at()을 이용하면 음수도 출력 가능하다는 것을 이용하여 풀었다.
5. 소인수분해
문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
function primeFactors(n){ const set = new Set(); // 짝수 판별 while ( n % 2 === 0 ) { set.add(2); n /= 2; } // 홀수 판별 for (let i = 3; i <= n; i+=2 ) { while (n % i === 0 ) { set.add(i); n /= i; } } if (n !==1) set.add(n); return [...set] } function solution(n) { return primeFactors(n); }
소수 판별 함수를 따로 분리해서 풀었다.
짝수 먼저 판별 후, 홀수 판별했는데 이때, while문으로 작성해야 소수판별을 할 수 있다.
6. 외계어 사전
문제 설명
PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.
function solution(spell, dic) { for (let s of dic) { if (s.length === spell.length) { for (let one of spell) { s = s.replace(one,''); } if (s==='') return 1; } } return 2; }
참고로 string.replace는 string을 변화시키지 않는다.
그리고 위에 풀이는 아래처럼 간결하게 풀 수 있다.
function solution(spell, dic) { return dic.filter(v=>spell.every(c=>v.includes(c))).length ? 1 : 2; }
7. 삼각형의 완성조건(2)
문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
- 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.
function solution(sides) { var answer = 0; if(Math.max(...sides)===Math.min(...sides)) answer+=1; // max(sides)가 긴변인 경우 for(let i =1; i <Math.max(...sides);i++ ){ if(Math.max(...sides)-Math.min(...sides) <= i ) answer+=1; } console.log(answer) // new 값이 긴변인 경우 var max = sides.reduce((a,b) => {return a+b},0); for (let j =Math.max(...sides)+1;j <= max ; j++ ) { if (j < max) answer +=1 } return answer; }
sides[1,1]처럼 원소가 같을 경우 answer+=1을 해야 한다.
20분 넘게 이 문제를 풀었는데 모범답안을 보고 할 말을 잃었다....
function solution(sides) { return Math.min(...sides)*2-1 }
이렇게 간단하게 풀 수 있다니....... 수학 공식을 좀 더 생각한 풀이이다.
'알고리즘 > 코딩 테스트' 카테고리의 다른 글