Oct 26, 2020 2020-10-26T19:46:00+09:00 by juyoung
Updated Dec 27, 2020 2020-12-27T21:41:07+09:00 8 min
문자를 다룰 땐 역시 정규표현식이 가장 코드량이 짧고 효율적인 듯 하다. ‘배열은 편리하고 성능도 좋은 메소드를 많이 제공하므로 얼마나 많은 메소드를 알고 있냐가 프로그래밍의 효율성을 좌지우지한다’는 제로초님 말처럼 알고리즘 문제를 풀면서 배열 뿐 아니라 문자, 숫자와 관련된 다양한 메소드들을 찾아보고 여러 번 써보면서 익히는 시간이었다.
프로그래머스에서 문제 확인하기
11. 콜라츠 추측
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| //sol1
function solution(n, count = 0) {
// let a = 0;
// console.log(a++, ++a);
return n === 1 ? (count > 500 ? -1 : count) : solution(n % 2 ? n * 3 + 1 : n / 2, ++count);
}
//sol2
function solution(n) {
let i = 0;
while (n > 1) {
n % 2 === 0 ? n = n / 2 : n = n * 3 + 1;
i++;
}
if (i > 500) i = -1;
console.log(i);
}
console.log(solution(626331));
|
12. 하샤드 수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| //sol1
//
function solution(x, i = 0, sum = 0) {
return String(x).length == i ? x % sum == 0 : solution(x, i + 1, sum + String(x)[i] * 1);
}
//sol2
function solution(x) {
let answer = false;
let n = x.toString().split('').map(v => +v);
let d = n.reduce((a, c) => a + c);
if (x % d === 0) answer = true;
return answer;
}
console.log(solution(18));
|
13. 핸드폰 번호 가리기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| //sol1
function solution(phone_number) {
let a = phone_number.split('');
a.map((v, i) => {
if (i < a.length - 4) {
a[i] = "*";
}
});
return a.join('');
}
//sol2
function solution(s) {
return s.replace(/\d(?=\d{4})/g, "*");
}
//sol3
function solution(s) {
let result = '';
for (let i = 0; i < s.length; i++) {
result += i < s.length - 4 ? "*" : s.charAt(i);
}
return result;
}
//sol4
function solution(s) {
let a = Array(s.length - 3).join("*");
let b = s.substring(s.length - 4);
console.log(b);
return a + b;
}
//sol5
function solution(s) {
var _str = '';
for (var i = 0; i < s.length - 4; i++) {
_str += '*';
}
var result = s.replace(s.substr(0, s.length - 4), _str);
return result;
}
//sol6
function solution(s) {
console.log(s.slice(-4));
return "*".repeat(s.length - 4) + s.slice(-4);
}
console.log(solution("01033334444"));
|
14. 행렬의 덧셈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| //sol1
function solution(arr1, arr2) {
return arr1.map((arr, i) => arr.map((v, j) => v + arr2[i][j]));
}
//sol2
function solution(A, B) {
var answer = Array();
for (var i = 0; i < A.length; i++) {
answer[i] = [];
for (var j = 0; j < A[i].length; j++) {
answer[i][j] = A[i][j] + B[i][j];
}
}
return answer;
}
//sol3
function solution(arr1, arr2) {
let arr = [[], []], a = [[], []];
for (let i = 0; i <= arr1.length - 1; i++) {
for (let j = 0; j <= arr1.length - 1; j++) {
arr[i].push(arr1[i][j] + arr2[i][j]);
}
arr[i].filter((v) => {
if (!isNaN(v)) return a[i].push(v);
});
}
return a;
}
console.log(solution([[1], [2]], [[3], [4]]));
|
15. 시저암호
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| //sol1
function solution(s, n) {
let a = s.split('').map(v => v.charCodeAt() + n);
let b = '';
a.map((v, i) => {
if (v > 90 && v < 97) {
a[i] = v - 90 + 64;
}
if (v > 122) {
a[i] = v - 122 + 96;
}
if (v < 65) a[i] = 32;
b += String.fromCharCode(a[i]);
});
return b;
}
//sol2
function solution(s, n) {
return s.split('').map((l) => {
console.log(l.charCodeAt() <= 90);
return l === ' '
? l
: l.charCodeAt() + n > 122 || (l.charCodeAt() <= 90 && l.charCodeAt() + n > 90)
? String.fromCharCode((l.charCodeAt() + n) - 26)
: String.fromCharCode(l.charCodeAt() + n);
}).join('');
}
console.log(solution("a B z", 4));
|
16. 이상한 문자 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| //sol1
function solution(s) {
let arr = [], p = [];
s.split(' ').forEach((el) => {
arr = el.split('').map((v, i) => {
if (i % 2 === 0) {
return v.toUpperCase();
} else {
return v.toLowerCase();
}
});
p.push(arr.join(''));
});
return p.join(' ');
}
//sol2
const solution = (s) => {
return s.toUpperCase().replace(/(\w)(\w)/g, function (a) { return a[0].toUpperCase() + a[1].toLowerCase(); })
};
//sol3
function solution(s) {
return s.split(' ').map(w => (
w.split('').map((v, i) => (i % 2 ? v.toLowerCase() : v.toUpperCase())).join('')
)).join(' ');
}
//sol4
function solution(s) {
let answer = '';
for (let word of s.split(' ')) {
console.log(word);
for (let i in word) {
console.log(i);
answer += word[i][parseInt(i) % 2 == 0 ? 'toUpperCase' : 'toLowerCase']();
}
// console.log(answer);
answer += ' ';
};
// console.log(answer.split(''));
return answer.slice(0, -1);
}
//sol5
function solution(s) {
let result = '', num = 0;
for (let i in s) {
if (s.charAt(i) == " ") {
num = 0;
result += ' ';
continue;
} else if (num % 2 == 0) {
result += (s.charAt(i)).toUpperCase();
num++;
} else {
result += (s.charAt(i)).toLowerCase();
num++;
}
}
return result;
}
console.log(solution("try hello world"));
|
17. 짝수와 홀수
1
2
3
4
5
| function solution(n) {
console.log(0 % 2 == true);
return n % 2 ? "Odd" : "Even";
}
console.log(solution(0));
|
18. 문자열 다루기 기본
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| //sol1
function solution(s) {
if (isNaN(parseInt(s)) && [4, 6].includes(s.length)) {
return false;
} else {
return true;
}
}
//sol2
function solution(s) {
function solution(s) {
return /^[0-9]+$/.test(s) && [4, 6].includes(s.length);
}
}
console.log(solution('ee22'));
console.log(/^[0-9]+$/.test('22'));//true
|
19. 가운데 글자 가져오기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| //sol1
function solution(s) {
return s.substr(Math.ceil(s.length/2)-1, s.length%2 !== 0 ? 1 : 2);
}
console.log(solution("qwer"));
//sol2
function solution(s) {
var length = s.length;
var answer = '';
if(!(s.length >0 && s.length<100)) {
return;
}
if(length % 2 != 0) {
answer = s.slice(length/2, length/2 +1);
console.log(length/2 , length/2 +1);
}else {
answer = s.slice(length/2 -1, length/2 +1);
console.log(length/2 -1, length/2 +1);
}
return answer;
}
let s = 'abcd';
console.log(solution(s));
|
20. 자연수 뒤집어 배열로 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| //sol1
function solution(n) {
var arr = [];
do {
console.log(n % 10);
arr.push(n % 10);
n = Math.floor(n / 10);
}
while (n > 0);
return n.toString().split('').reverse().map(v => parseInt(v));
}
//sol2
function solution(n) {
console.log(n.toString().split(''));
return n.toString().split('').reverse().map(v => +v);
}
//sol3
function solution(n) {
let arr = [];
n.toString().split('').map((v, i) => arr.push(parseInt(v))).reverse();
console.log(arr);
}
console.log(solution(19875));
|
참고:
MDN https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array regexr https://regexr.com/