반응형
Level 2 연습문제 ( JavaScript )
작성한 코드보다 더 좋은 코드가 있음을 미리 알려드리며,
코드의 해설이 필요하신 분은, 댓글 남겨주시면 적어놓겠습니다.
목차
- N개의 최소공배수
- JadenCase 문자열 만들기
- 행렬의 곱셈
- 피보나치 수
- 최솟값 만들기
- 최댓값과 최솟값
- 숫자의 표현
- 땅따먹기
- 다음 큰 숫자
- 올바른 괄호
- 124 나라의 숫자
풀이
1. N개의 최소공배수
function solution(arr) {
const gcd = (a, b) => b ? gcd(b, a % b) : a
return arr.reduce((a, b) => a * b / gcd(a, b))
}
2. JadenCase 문자열 만들기
function solution(s) {
return s.split(' ').map(a => a === '' ? a : a[0].toUpperCase() + a.slice(1).toLowerCase()).join(' ');
}
3. 행렬의 곱셈
function solution(arr1, arr2) {
const res = Array.from(Array(arr1.length), () => new Array(arr2[0].length))
for ( let i = 0; i < arr1.length; i++ ) {
for ( let j = 0; j < arr2[0].length; j++ ) {
res[i][j] = arr1[i].map((a,idx) => a*arr2[idx][j]).reduce((a,b) => a+b)
}
}
return res
}
4. 피보나치 수
function solution(n) {
const arr = [0, 1];
if ( n < 2 ) return arr[n];
let cur = 1;
while ( ++cur <= n ) {
arr.push((arr[cur-1] + arr[cur-2]) % 1234567);
}
return arr[n] ;
}
5. 최솟값 만들기
function solution(A,B){
A = A.sort((a,b) => a-b)
return B.sort((a,b) => b-a).map((b,i) => b*A[i])
.reduce((a,b) => a+b)
}
6. 최댓값과 최솟값
function solution(s) {
const arr = s.split(' ').map(a => +a).sort((a,b) => a-b)
return `${arr[0]} ${arr.slice(-1)[0]}`
}
7. 숫자의 표현
function solution(n) {
let count = 1
const check = (num, t) => {
let acc = 0;
while ( acc < t ) {
acc += num
num++
if ( acc === t ) return true
}
return false;
}
for ( let i = 1; i <= parseInt(n/2); i++ ) {
if ( check(i, n) ) count++
}
return count;
}
8. 땅따먹기
function solution(land) {
for ( let i = 1; i < land.length; i++ ) {
for ( let j = 0; j < 4; j++ ) {
const arr = land[i-1].slice();
land[i][j] += j === 0 ?
Math.max(...arr.slice(1)) :
Math.max(...arr.slice(0, j), ...arr.slice(j+1))
}
}
return Math.max(...land[land.length-1])
}
9. 다음 큰 숫자
function solution(n) {
let result = 0;
for ( let i = n+1; i < n+10; i++) {
if ( n.toString(2).match(/1/g).length == i.toString(2).match(/1/g).length) return i
}
}
10. 올바른 괄호
function solution(s){
let count = 0;
for ( let i = 0; i < s.length; i++ ) {
if ( count < 0 ) return false;
s[i] === '(' ? count++ : count--;
}
return !count;
}
11. 124 나라의 숫자
function solution(n) {
let res = '';
while ( n > 0 ) {
switch ( n % 3 ) {
case 0:
res = '4' + res
n = n/3 - 1
break;
case 1:
res = '1' + res
n = Math.floor(n/3)
break;
case 2:
res = '2' + res
n = Math.floor(n/3)
break;
}
}
return res
}