diff --git "a/day32/\352\260\200\352\271\214\354\232\264\354\210\230.ts" "b/day32/\352\260\200\352\271\214\354\232\264\354\210\230.ts" new file mode 100644 index 0000000..c9dbddb --- /dev/null +++ "b/day32/\352\260\200\352\271\214\354\232\264\354\210\230.ts" @@ -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 diff --git "a/day32/\354\247\204\353\243\214\354\210\234\354\204\234\354\240\225\355\225\230\352\270\260.ts" "b/day32/\354\247\204\353\243\214\354\210\234\354\204\234\354\240\225\355\225\230\352\270\260.ts" new file mode 100644 index 0000000..fc54c5d --- /dev/null +++ "b/day32/\354\247\204\353\243\214\354\210\234\354\204\234\354\240\225\355\225\230\352\270\260.ts" @@ -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] diff --git "a/day32/\355\225\234\353\262\210\353\247\214\353\223\261\354\236\245\355\225\234\353\254\270\354\236\220.ts" "b/day32/\355\225\234\353\262\210\353\247\214\353\223\261\354\236\245\355\225\234\353\254\270\354\236\220.ts" new file mode 100644 index 0000000..10a9a5b --- /dev/null +++ "b/day32/\355\225\234\353\262\210\353\247\214\353\223\261\354\236\245\355\225\234\353\254\270\354\236\220.ts" @@ -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. 효율 개선 + +console.log(한번만등장한문자('abcabcadc')); // "d" +console.log(한번만등장한문자('abdc')); // "abcd" +console.log(한번만등장한문자('hello')); // "eho"