diff --git a/bona1122/[week9]Sort/File_sort.js b/bona1122/[week9]Sort/File_sort.js new file mode 100644 index 0000000..999dcdd --- /dev/null +++ b/bona1122/[week9]Sort/File_sort.js @@ -0,0 +1,33 @@ +// https://school.programmers.co.kr/learn/courses/30/lessons/17686 + +function solution(files) { + const regex = /([^0-9]+)([0-9]+)(.*)/ + files = files.map((file, idx) => ({ + name: file, + parts: file.match(regex), + originalIndex: idx, + })) + + files = files.sort((a, b) => { + { + // HEAD 부분 비교 (대소문자 무시) + const headA = a.parts[1].toLowerCase() + const headB = b.parts[1].toLowerCase() + + if (headA < headB) return -1 + if (headA > headB) return 1 + + // HEAD가 같으면 NUMBER 부분 비교 (숫자로 비교) + const numberA = Number(a.parts[2]) + const numberB = Number(b.parts[2]) + + if (numberA < numberB) return -1 + if (numberA > numberB) return 1 + + // HEAD와 NUMBER가 모두 같으면 원래 순서 유지 + return a.originalIndex - b.originalIndex + } + }) + + return files.map((file) => file.name) +} diff --git a/bona1122/[week9]Sort/H_index.js b/bona1122/[week9]Sort/H_index.js new file mode 100644 index 0000000..d56ae6a --- /dev/null +++ b/bona1122/[week9]Sort/H_index.js @@ -0,0 +1,16 @@ +// https://school.programmers.co.kr/learn/courses/30/lessons/42747 +// 핵심: 논문을 인용 횟수 기준 내림차순으로 정렬한 후, +// 논문의 개수(인덱스+1)가 해당 논문의 인용 횟수보다 작거나 같은 최대 지점을 찾는 것 + +function solution(citations) { + citations = citations.sort((a, b) => b - a) + + let i = 0 // 현재까지 확인한 논문의 인덱스 + // i+1 <= citations[i]가 참이면: + // "i+1번 이상 인용된 논문이 i+1편 이상"이라는 의미 + while (i + 1 <= citations[i]) { + i++ + } + + return i +} diff --git a/bona1122/[week9]Sort/Largest_number.js b/bona1122/[week9]Sort/Largest_number.js new file mode 100644 index 0000000..d30577f --- /dev/null +++ b/bona1122/[week9]Sort/Largest_number.js @@ -0,0 +1,12 @@ +// https://school.programmers.co.kr/learn/courses/30/lessons/42746 + +function solution(numbers) { + const convertString = numbers.map((number) => number.toString()) + const sorted = convertString.sort((a, b) => { + const AB = Number(a + b) + const BA = Number(b + a) + return BA - AB + }) + const result = sorted.join("") + return result[0] === "0" ? "0" : result +} diff --git a/bona1122/[week9]Sort/Pick_two_sum.js b/bona1122/[week9]Sort/Pick_two_sum.js new file mode 100644 index 0000000..e5f84c3 --- /dev/null +++ b/bona1122/[week9]Sort/Pick_two_sum.js @@ -0,0 +1,14 @@ +// https://school.programmers.co.kr/learn/courses/30/lessons/68644 + +const solution = numbers => { + const set = new Set(); + + for(let i = 0; i < numbers.length; i++){ + for(let j = i + 1; j a - b) +} \ No newline at end of file diff --git a/bona1122/[week9]Sort/Three_musketeers.js b/bona1122/[week9]Sort/Three_musketeers.js new file mode 100644 index 0000000..c7130d8 --- /dev/null +++ b/bona1122/[week9]Sort/Three_musketeers.js @@ -0,0 +1,24 @@ +// https://school.programmers.co.kr/learn/courses/30/lessons/131705 + +const solution = (number) => { + // 학생은 각자 정수번호가짐 + // 세명의 번호를 더해서 0이 되면 삼총사, 삼총사 만드는 가짓수 구하기 + let result = 0 + const selected = Array(3).fill(0) + const dfs = (depth, start) => { + if (depth === 3) { + let sum = 0 + for (let i of selected) { + sum += number[i] + } + if (sum === 0) result++ + return + } + for (let i = start; i < number.length; i++) { + selected[depth] = i + dfs(depth + 1, i + 1) + } + } + dfs(0, 0) + return result +}