Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions day31/k의개수.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// https://school.programmers.co.kr/learn/courses/30/lessons/120887

// 최초 코드
const k의개수 = (i: number, j: number, k: number): number => {
let cnt = 0;
while (i <= j) {
cnt += [...i.toString()].filter((v) => parseInt(v, 10) === k).length;
i++;
}
return cnt;
};

// 개선 코드
const k의개수2 = (i: number, j: number, k: number): number => {
let str = '';
while (i <= j) str += i++;
// k를 기준으로 문자열을 나누면 k+1개의 요소로 나눠진다.
return str.split(k.toString()).length - 1;
};

console.log(k의개수(1, 13, 1)); // 6
console.log(k의개수(10, 50, 5)); // 5
console.log(k의개수(3, 10, 2)); // 0

console.log(k의개수2(1, 13, 1)); // 6
console.log(k의개수2(10, 50, 5)); // 5
console.log(k의개수2(3, 10, 2)); // 0
44 changes: 44 additions & 0 deletions day31/숨어있는숫자의덧셈2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// https://school.programmers.co.kr/learn/courses/30/lessons/120864

import { sum } from 'lodash';

// ver 1. 틀린 코드
// /\d/의 경우 한자리 자연수만 검사하게 된다. 문제 의도와 다르다.
const 숨어있는숫자의덧셈2a = (str: string): number => {
return sum([...str].filter((v) => /\d/.test(v)).map((v) => parseInt(v, 10)));
};

//! 최적의 코드인 것 같다.
// ver 2. split 사용
const 숨어있는숫자의덧셈2b = (str: string): number => {
return sum(
str
.split(/[a-z]/i)
.filter((v) => v !== '')
.map((v) => parseInt(v, 10)),
);
};

// ver 3. replace 사용
const 숨어있는숫자의덧셈2c = (str: string) => {
let ans = 0;
str
.replace(/\D/g, ' ')
.split(' ')
.forEach((v) => {
if (v !== '') ans += parseInt(v, 10);
});
return ans;
};

// ver 4. 다른 사람 코드
// /\D+/g와 reduce 활용
Comment on lines +34 to +35
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

키워드를 활용하여 코드 작성해보기


console.log(숨어있는숫자의덧셈2a('aAb1B2cC34oOp')); // 37
console.log(숨어있는숫자의덧셈2a('1a2b3c4d123Z')); // 133

console.log(숨어있는숫자의덧셈2b('aAb1B2cC34oOp')); // 37
console.log(숨어있는숫자의덧셈2b('1a2b3c4d123Z')); // 133

console.log(숨어있는숫자의덧셈2c('aAb1B2cC34oOp')); // 37
console.log(숨어있는숫자의덧셈2c('1a2b3c4d123Z')); // 133
32 changes: 32 additions & 0 deletions day31/팩토리얼.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// https://school.programmers.co.kr/learn/courses/30/lessons/120848

// ver 1. 최초 코드
// 코드가 명시적임
// 시간 효율은 ver 2보다 떨어진다.
const 팩토리얼 = (n: number): number => {
// 팩토리얼 함수
const factorialFunc = (num: number): number => {
if (num === 1) return 1;
return num * factorialFunc(num - 1);
};
// 코어 로직
let cnt = 0;
while (factorialFunc(cnt + 1) <= n) cnt++;
return cnt;
};

// ver 2. 개선 코드
// 코드 의미가 명시적이지는 않지만, 시간 효율은 좋다.
const 팩토리얼2 = (n: number): number => {
let fac = 1;
let i = 1;
while (fac <= n) fac *= ++i;
return i - 1;
};

console.log(팩토리얼(3628800)); // 10
console.log(팩토리얼(7)); // 3

console.log(팩토리얼2(3628800)); // 10
console.log(팩토리얼2(7)); // 3
console.log(팩토리얼2(5)); // 2