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
35 changes: 35 additions & 0 deletions day32/가까운수.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// https://school.programmers.co.kr/learn/courses/30/lessons/120890

// 최초 코드
const 가까운수 = (array: number[], n: number): number => {
array.sort();
const absArr = array.map((v) => Math.abs(v - n));
const closestVal = Math.min(...absArr);
const closestIdx = absArr.findIndex((v) => v === closestVal);
return array[closestIdx];
};

// 다른 사람 코드
// sort() 메서드의 콜백함수 2가지 기준 정렬 적용
const 가까운수2 = (array: number[], n: number): number => {
array.sort((a, b) => Math.abs(n - a) - Math.abs(n - b) || a - b);
return array[0];
};

// sort() 콜백 함수를 풀어서 작성
const 가까운수3 = (array: number[], n: number): number => {
array.sort((a, b) => {
if (Math.abs(n - a) - Math.abs(n - b) === 0) return a - b;
return Math.abs(n - a) - Math.abs(n - b);
});
return array[0];
};

console.log(가까운수([3, 10, 28], 20)); // 28
console.log(가까운수([10, 11, 12], 13)); // 12

console.log(가까운수2([3, 10, 28], 20)); // 28
console.log(가까운수2([10, 11, 12], 13)); // 12

console.log(가까운수3([3, 10, 28], 20)); // 28
console.log(가까운수3([10, 11, 12], 13)); // 12
10 changes: 10 additions & 0 deletions day32/진료순서정하기.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// https://school.programmers.co.kr/learn/courses/30/lessons/120835

const 진료순서정하기 = (emergency: number[]): number[] => {
const sortedEM = [...emergency].sort((a, b) => b - a);
return emergency.map((v) => sortedEM.indexOf(v) + 1);
};

console.log(진료순서정하기([3, 76, 24])); // [3, 1, 2]
console.log(진료순서정하기([1, 2, 3, 4, 5, 6, 7])); // [7, 6, 5, 4, 3, 2, 1]
console.log(진료순서정하기([30, 10, 23, 6, 100])); // [2, 4, 3, 5, 1]
24 changes: 24 additions & 0 deletions day32/한번만등장한문자.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// https://school.programmers.co.kr/learn/courses/30/lessons/120896

// ver 1. 최초 코드
// 비효율이 보인다.
const 한번만등장한문자 = (s: string): string => {
const strMap = new Map();
[...s].forEach((v) => {
const val = strMap.get(v);
if (!val) strMap.set(v, 1);
else strMap.set(v, val + 1);
});
return Array.from(strMap)
.filter((v) => v[1] === 1)
.join('')
.match(/[a-z]+/gi)
?.sort((a, b) => a.localeCompare(b))
.join('') as string;
};

// ver 2. 효율 개선
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(한번만등장한문자('abcabcadc')); // "d"
console.log(한번만등장한문자('abdc')); // "abcd"
console.log(한번만등장한문자('hello')); // "eho"