Skip to content

Commit ef9ed33

Browse files
committed
[Add] Programmers > Level2
1 parent 7ba51aa commit ef9ed33

File tree

8 files changed

+158
-0
lines changed

8 files changed

+158
-0
lines changed

Programmers/Level2/Q11.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Q11. N개의 최소공배수
2+
3+
function solution(arr) {
4+
// 최대공약수 구하기 (유클리드 호제법)
5+
function getGcd(a, b) {
6+
if (b === 0) {
7+
return a;
8+
} else {
9+
return getGcd(b, a % b);
10+
}
11+
}
12+
13+
// 최소공배수 구하기 (두 수의 곱 / 최대공약수)
14+
let lcm = (arr[0] * arr[1]) / getGcd(arr[0], arr[1]);
15+
for (let i = 2; i < arr.length; i++) {
16+
lcm = (lcm * arr[i]) / getGcd(lcm, arr[i]);
17+
}
18+
19+
return lcm;
20+
}

Programmers/Level2/Q12.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Q12. JadenCase 문자열 만들기
2+
3+
function solution(s) {
4+
var answer = "";
5+
const arr = s.split(" ");
6+
7+
for (let i = 0; i < arr.length; i++) {
8+
let str = arr[i].toLowerCase();
9+
10+
// 정규식으로 앞이 문자인지 숫자인지 확인
11+
// 굳이 없어도 됨. 그냥 무조건 첫 문자를 대문자로 변경해도 됨
12+
if (/^\D/g.test(str) === true) {
13+
str = str[0].toUpperCase() + str.slice(1);
14+
}
15+
16+
answer += i === arr.length - 1 ? str : str + " ";
17+
}
18+
19+
return answer;
20+
}
21+
22+
// 이렇게 해도 됨..!
23+
// 근데 이게 한 줄 말고 나눠서 표현은 안 됨.. 왜 그럴까?
24+
//return s.split(" ").map(v => v.charAt(0).toUpperCase() + v.substring(1).toLowerCase()).join(" ");

Programmers/Level2/Q13.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Q13. 행렬의 곱셈
2+
3+
function solution(arr1, arr2) {
4+
var answer = [];
5+
6+
arr1.forEach((a) => {
7+
let results = [];
8+
9+
for (let i = 0; i < arr2[0].length; i++) {
10+
let result = 0;
11+
a.forEach((v, j) => {
12+
result += v * arr2[j][i];
13+
});
14+
results.push(result);
15+
}
16+
17+
answer.push(results);
18+
});
19+
20+
return answer;
21+
}

Programmers/Level2/Q14.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Q14. 피보나치 수
2+
3+
function solution(n) {
4+
var answer = 0;
5+
let result = [0, 1];
6+
7+
function fib(n) {
8+
for (let i = 2; i <= n; i++) {
9+
result[i] = (result[i - 2] % 1234567) + (result[i - 1] % 1234567);
10+
}
11+
return result[n];
12+
}
13+
14+
answer = fib(n) % 1234567;
15+
16+
return answer;
17+
}

Programmers/Level2/Q15.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Q15. 최솟값 만들기
2+
3+
function solution(A, B) {
4+
A.sort((a, b) => a - b);
5+
B.sort((a, b) => b - a);
6+
7+
const answer = A.reduce((acc, cur, i) => acc + cur * B[i], 0);
8+
9+
return answer;
10+
}

Programmers/Level2/Q16.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Q16. 최댓값과 최솟값
2+
3+
function solution(s) {
4+
const arr = s.split(" ");
5+
const maxN = Math.max(...arr);
6+
const minN = Math.min(...arr);
7+
8+
return minN + " " + maxN;
9+
}

Programmers/Level2/Q17.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Q17. 숫자의 표현
2+
3+
function solution(n) {
4+
var answer = 0;
5+
6+
function sub(num, result) {
7+
if (num > result) return;
8+
if (num === result) {
9+
answer += 1;
10+
return;
11+
}
12+
13+
sub(num + 1, result - num);
14+
}
15+
16+
for (let i = 1; i <= Math.floor(n / 2); i++) {
17+
sub(i, n);
18+
}
19+
20+
return answer + 1;
21+
}
22+
23+
// n의 약수 중 홀수인 것의 개수와 같다고 함.. (수학적으로)
24+
/*
25+
function expressions(num) {
26+
var answer = 0;
27+
28+
for (var i = 1; i <= num; i++) {
29+
if (num % i == 0 && i % 2 == 1) answer++;
30+
}
31+
return answer;
32+
}
33+
*/

Programmers/Level2/Q18.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Q18. 땅따먹기
2+
3+
function solution(land) {
4+
var answer = 0;
5+
var len = land.length;
6+
7+
for (var i = len - 2; i >= 0; i--) {
8+
land[i][0] =
9+
Math.max(land[i + 1][1], land[i + 1][2], land[i + 1][3]) + land[i][0];
10+
land[i][1] =
11+
Math.max(land[i + 1][0], land[i + 1][2], land[i + 1][3]) + land[i][1];
12+
land[i][2] =
13+
Math.max(land[i + 1][0], land[i + 1][1], land[i + 1][3]) + land[i][2];
14+
land[i][3] =
15+
Math.max(land[i + 1][0], land[i + 1][1], land[i + 1][2]) + land[i][3];
16+
}
17+
18+
answer = Math.max(...land[0]);
19+
return answer;
20+
}
21+
22+
// 동적 프로그래밍 이용
23+
// (i, 0)에서 출발해 얻을 수 있는 최댓값은 max((i+1, 1), (i+1, 2), (i+1, 3)) + (i, 0)의 값
24+
// land에 최댓값을 저장해둔다.

0 commit comments

Comments
 (0)