JS 알고리즘 입문 20문제
JS 알고리즘 입문 20문제
1. 모스부호 (1)
1
2
3
4
5
6
7
8
9
10
11
function solution(letter) {
var answer = '';
const morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'
}
return letter.split(" ").map((v) => morse[v]).join("");
}
2. 2차원으로 만들기
1
2
3
4
5
6
7
8
function solution(num_list, n) {
var answer = Array.from({ length: num_list.length / n }, () => []);
for (let i = 0; i < num_list.length; i++) {
answer[Math.floor(i / n)].push(num_list[i]);
}
return answer;
}
3. k의 개수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function solution(i, j, k) {
var answer = 0;
for(let num = i ; num <= j ; num++) {
const arr = num.toString().split("");
answer += arr.filter(ele => k.toString() === ele).length;
}
return answer;
}
// 다른 사람 풀이 (어떤 원리인지는 잘 모르겠다,,)
function solution(i, j, k) {
let a ='';
for(i;i<=j;i++){
a += i;
}
return a.split(k).length-1;
}
4. A로 B만들기
1
2
3
function solution(before, after) {
return before.split("").sort().join("") == after.split("").sort().join("") ? 1 : 0;
}
5. 진료 순서 정하기
1
2
3
4
5
function solution(emergency) {
var answer = [];
const sortEmergency = [...emergency].sort((a,b) => b-a);
return emergency.map((value) => sortEmergency.indexOf(value)+1);
}
6. 숨어있는 숫자의 덧셈 (2)
1
2
3
4
5
6
7
8
9
10
11
12
function solution(my_string) {
const regex = /\d+/g;
const matches = my_string.match(regex);
if (!matches) return 0;
return matches.reduce((acc, curr) => acc + parseInt(curr), 0);
}
// 다른 사람 풀이
function solution(my_string) {
return my_string.split(/\D+/).reduce((acc, cur) => acc + Number(cur), 0);
}
7. 가까운 수
1
2
3
4
5
6
7
8
9
10
11
function solution(array, n) {
var answer = 0;
let min = 100;
for(let num of array.sort((a,b) => a-b)) {
if(Math.abs(num - n) < min) {
min = Math.abs(num - n);
answer = num;
}
}
return answer;
}
8. 팩토리얼
1
2
3
4
5
6
7
8
9
10
11
12
function solution(n) {
let answer = 0;
let factorial = 1;
let i = 1;
while(n < factorial) {
factorial *= i++;
if(n < factorial) return answer
answer++;
}
return answer;
}
9. 한 번만 등장한 문자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function solution(s) {
const answer = [];
const obj = {};
for(let str of s) {
if(obj[str]) obj[str]++;
else obj[str] = 1;
}
for(let key in obj) {
if(obj[key] == 1) answer.push(key);
}
return answer.sort().join("");
}
// 다른 사람 풀이
function solution(s) {
let res = [];
for (let c of s) {
if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
}
return res.sort().join('');
}
10. 7의 개수
1
2
3
function solution(array) {
return array.join("").split("7").length - 1;
}
11. 컨트롤 제트
1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(s) {
var answer = 0;
const arr = s.split(" ");
for(let i = 0 ; i < arr.length ; i++) {
if(arr[i] == "Z") {
answer -= Number(arr[i-1]);
} else {
answer += Number(arr[i]);
}
}
return answer;
}
12. 소인수 분해
1
2
3
4
5
6
7
8
9
10
11
12
function solution(n) {
var answer = [];
let d = 2;
while (n != 1) {
if (n % d != 0) d++;
else {
n /= d;
if(!answer.includes(d)) answer.push(d);
}
}
return answer;
}
13. 이진수 더하기
1
2
3
function solution(bin1, bin2) {
return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);
}
14. 잘라서 배열로 저장하기
1
2
3
4
function solution(my_str, n) {
const regex = new RegExp(`.{1,${n}}`, 'g');
return my_str.match(regex);
}
15. 공 던지기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function solution(numbers, k) {
var answer = 0;
let cnt = 0;
let i = 0;
while (cnt != k) {
cnt++;
answer = numbers[i];
i = (i+2) % numbers.length;
}
return answer;
}
// 다른 사람 풀이
function solution(numbers, k) {
return numbers[((2 * (k -1))) % numbers.length];
}
16. 문자열 계산하기
1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(my_string) {
const strArr = my_string.split(" ");
let answer = Number(strArr[0]);
for(let i = 1 ; i < strArr.length ; i+=2) {
if(strArr[i] == "+") {
answer += Number(strArr[i+1]);
} else {
answer -= Number(strArr[i+1])
}
}
return answer;
}
17. 삼각형의 완성조건(2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function solution(sides) {
var answer = 0;
sides.sort((a,b) => a - b);
// 가장 긴 변이 a[1]인 경우
let small = sides[1] - sides[0] + 1;
answer += sides[1] - small + 1;
// 나머지 한 변이 긴 변인 경우
let big = sides[0] - 1;
answer += big;
return answer;
}
18. 영어가 싫어요
1
2
3
4
5
6
function solution(numbers) {
var answer = 0;
const numArr = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
for(let idx in numArr) numbers = numbers.replaceAll(numArr[idx], idx.toString());
return Number(numbers);
}
19. 구슬을 나누는 경우의 수
1
2
3
4
5
6
7
function solution(balls, share) {
let answer = 1;
for(let i = balls; i > share ; i--) answer *= i;
for(let i = 1 ; i <= balls - share ; i++) answer /= i;
return Math.round(answer);
}
// 반올림을 해야하는데 parseInt 처리해서 시간이 오래걸림.
20. 캐릭터의 좌표
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function solution(keyinput, board) {
let answer = [0, 0];
let maxX = Math.floor(board[0] / 2);
let maxY = Math.floor(board[1] / 2);
for (let input of keyinput) {
switch (input) {
case "up":
if (answer[1] < maxY) answer[1]++;
break;
case "down":
if (answer[1] > -maxY) answer[1]--;
break;
case "left":
if (answer[0] > -maxX) answer[0]--;
break;
case "right":
if (answer[0] < maxX) answer[0]++;
break;
}
}
return answer;
}
END
This post is licensed under CC BY 4.0 by the author.