[JavaScript/section 7] 09 - κ²°ν˜Όμ‹
Β·
Algorithm/μΈν”„λŸ°(inflearn)
πŸ“Œ 09 - κ²°ν˜Όμ‹(그리디 μ•Œκ³ λ¦¬μ¦˜) ν”Όλ‘œμ—° μž₯μ†Œμ— λ™μ‹œμ— μ‘΄μž¬ν•˜λŠ” μ΅œλŒ€ μΈμ›μˆ˜λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. ν•œ μΉœκ΅¬κ°€ μ˜€λŠ” μ‹œκ°„μ΄ 13, κ°€λŠ” μ‹œκ°„μ΄ 15라면 이 μΉœκ΅¬λŠ” 13μ‹œ 정각에 ν”Όλ‘œμ—° μž₯에 μ‘΄μž¬ν•˜λŠ” 것이고 15μ‹œ μ •κ°μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  κ°€μ •ν•œλ‹€. λ‚˜μ˜ 풀이 방법 μ˜€λŠ” μ‹œκ°„(s)κ³Ό κ°€λŠ” μ‹œκ°„(e)을 λ‚˜λˆ„μ–΄ λ”°λ‘œ 배열을 λ§Œλ“  λ‹€μŒ μ˜€λ¦„μ°¨μˆœ 정렬을 ν•œλ‹€. 투 포인터 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ p1이 p2보닀 ν¬κ±°λ‚˜ κ°™μœΌλ©΄ μƒˆλ‘œμš΄ 배열에 κ°€λŠ” μ‹œκ°„(e)λ₯Ό μΆ”κ°€ν•˜κ³  p2++을 ν•œλ‹€. p1이 p2보닀 μž‘λ‹€λ©΄ μ˜€λŠ” μ‹œκ°„(s)λ₯Ό μΆ”κ°€ν•˜κ³  p1++을 ν•œλ‹€. for 문을 λŒλ©΄μ„œ 's'κ°€ λ‚˜μ˜€λ©΄ cnt++을 ν•΄μ£Όκ³  'e'κ°€ λ‚˜μ˜€λ©΄ cnt--λ₯Ό ν•΄μ€€λ‹€. ν”Όλ‘œμ—° μž₯μ†Œμ— λ“€μ–΄μ˜€κ±°λ‚˜ λ‚˜κ°€λŠ” μ‚¬λžŒμ΄ λ°œμƒν•  λ•Œλ§ˆλ‹€ ν”Όλ‘œμ—° μž₯μ†Œμ— μ‘΄μž¬ν•˜λŠ”..
[JavaScript/BOJ] 1181 - 단어 μ •λ ¬
Β·
Algorithm/λ°±μ€€(BOJ)
πŸ“Œ 문제(μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜) 1181번: 단어 μ •λ ¬ 첫째 쀄에 λ‹¨μ–΄μ˜ 개수 N이 μ£Όμ–΄μ§„λ‹€. (1 ≤ N ≤ 20,000) λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 걸쳐 μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œ 이루어진 단어가 ν•œ 쀄에 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. μ£Όμ–΄μ§€λŠ” λ¬Έμžμ—΄μ˜ κΈΈμ΄λŠ” 50을 λ„˜μ§€ μ•ŠλŠ”λ‹€. www.acmicpc.net πŸ“ 풀이 const fs = require('fs'); const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); function solution(input) { let answer; const [size, ...arr] = input; // 같은 단어가 μ—¬λŸ¬ 번 μž…λ ₯된 κ²½μš°μ—λŠ” ν•œ λ²ˆμ”©λ§Œ 좜λ ₯ let newArr = [...new Set(arr)]; ..
[JavaScript/section 7] 08 - νšŒμ˜μ‹€ λ°°μ •
Β·
Algorithm/μΈν”„λŸ°(inflearn)
πŸ“Œ 08 - νšŒμ˜μ‹€ λ°°μ •(그리디 μ•Œκ³ λ¦¬μ¦˜) 각 νšŒμ˜μ— λŒ€ν•΄ μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ Έ 있고, 각 νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ ν•˜λ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” μ΅œλŒ€μˆ˜μ˜ 회의λ₯Ό μ°ΎλŠ” λ¬Έμ œμ΄λ‹€. 단, 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ˜ 쑰건은 (μ‹œμž‘μ‹œκ°„ = endTime) { answer++; endTime = meeting[i][1]; } } return answer; } let arr = [ [3, 3], [1, 3], [2, 3], ]; console.log(solution(arr));
[JavaScript/section 7] 07 - μ’Œν‘œ μ •λ ¬
Β·
Algorithm/μΈν”„λŸ°(inflearn)
πŸ“Œ 07 - μ’Œν‘œ μ •λ ¬ N개의 ν‰λ©΄μƒμ˜ μ’Œν‘œ(x, y)κ°€ μ£Όμ–΄μ§€λ©΄ λͺ¨λ“  μ’Œν‘œλ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. μ •λ ¬ 기쀀은 λ¨Όμ € x값에 μ˜ν•΄μ„œ μ •λ ¬ν•˜κ³ , x값이 같을 경우 y값에 μ˜ν•΄ μ •λ ¬ν•œλ‹€. πŸ‘ 풀이 방법 sort() ν•¨μˆ˜λ₯Ό μ΄μš©ν•œλ‹€. 0번 μΈλ±μŠ€λŠ” x, 1번 μΈλ±μŠ€λŠ” y에 ν•΄λ‹Ήν•œλ‹€. x값이 같을 경우 y값에 μ˜ν•΄ μ •λ ¬ν•˜κ³  λ‹€λ₯Ό 경우 x값에 μ˜ν•΄ μ •λ ¬ν•œλ‹€. πŸ“ 풀이 function solution(arr) { let answer = arr; arr.sort((a, b) => { if (a[0] === b[0]) return a[1] - b[1]; else return a[0] - b[0]; }); return answer; } let arr = [ [2, 7], [1, 3], [1, 2], [2, 5..
[JavaScript/section 7] 06 - μž₯λ‚œκΎΈλŸ¬κΈ° ν˜„μˆ˜
Β·
Algorithm/μΈν”„λŸ°(inflearn)
πŸ“Œ 06 - μž₯λ‚œκΎΈλŸ¬κΈ° ν˜„μˆ˜ ν˜„μˆ˜μ™€ 짝꿍이 자리λ₯Ό λ°”κΎΌ 반 ν•™μƒλ“€μ˜ 일렬둜 μ„œμžˆλŠ” ν‚€ 정보가 μ£Όμ–΄μ§ˆ λ•Œ ν˜„μˆ˜κ°€ 받은 λ²ˆν˜Έμ™€ ν˜„μˆ˜ 짝꿍이 받은 번호λ₯Ό μ°¨λ‘€λŒ€λ‘œ 좜λ ₯ν•˜λŠ” λ¬Έμ œμ΄λ‹€. λ‚˜μ˜ 풀이 방법 (❌) μ™œ ν‹€λ Έμ„κΉŒβ“ 반 ν•™μƒλ“€μ˜ ν‚€ 정보가 μ£Όμ–΄μ§ˆ λ•Œ ν˜„μˆ˜μ™€ 같은 ν‚€κ°€ μžˆλŠ” 경우 λ°˜λ‘€κ°€ 생긴닀. for 문을 λŒλ©΄μ„œ i + 1 보닀 i κ°€ 큰 경우λ₯Ό μ°ΎλŠ”λ‹€. i + 1이 ν˜„μˆ˜κ°€ 받은 λ²ˆν˜Έκ°€ λœλ‹€. 정렬을 ν•œ ν›„ indexOf() ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ μ›λž˜ ν˜„μˆ˜κ°€ λ°›μ•„μ•Όν•˜λŠ” 번호λ₯Ό μ°ΎλŠ”λ‹€. 이 λ²ˆν˜Έκ°€ ν˜„μˆ˜ 짝꿍이 받은 λ²ˆν˜Έμ΄λ‹€. πŸ‘ κ°•μ‚¬λ‹˜ 풀이 방법 배열을 λ³΅μ‚¬ν•˜λŠ” λ°©λ²•μ—λŠ” μ—¬λŸ¬κ°€μ§€κ°€ μžˆμ§€λ§Œ μ—¬κΈ°μ—μ„œλŠ” Array.from(arr)κ³Ό arr.slice()λ₯Ό μ†Œκ°œν•΄μ£Όκ³  μžˆλ‹€. 단, 1 레벨(1차원 λ°°μ—΄)에 λŒ€ν•΄μ„œλŠ” κΉŠμ€ ..
[JavaScript/section 7] 05 - LRU
Β·
Algorithm/μΈν”„λŸ°(inflearn)
πŸ“Œ 05 - Least Recently Used(카카였 μΊμ‹œ 문제 λ³€ν˜•) λ§Œμ•½ μΊμ‹œμ˜ μ‚¬μ΄μ¦ˆκ°€ 5이고 μž‘μ—…μ΄ [2, 3, 1, 6, 7] 순으둜 μ €μž₯λ˜μ–΄ μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μžβ— 1) Cache Miss: ν•΄μ•Όν•  μž‘μ—…μ΄ μΊμ‹œμ— μ—†λŠ” μƒνƒœλ‘œ μœ„ μƒνƒœμ—μ„œ λ§Œμ•½ μƒˆλ‘œμš΄ μž‘μ—…μΈ 5번 μž‘μ—…μ„ CPUκ°€ μ‚¬μš©ν•œλ‹€λ©΄ Cache Missκ°€ 되고 λͺ¨λ“  μž‘μ—…μ΄ λ’€λ‘œ λ°€λ¦° ν›„ 5번 μž‘μ—…μ€ μΊμ‹œμ˜ 맨 μ•žμ— μœ„μΉ˜ν•œλ‹€. [5, 2, 3, 1, 6] (7번 μž‘μ—…μ€ μΊμ‹œμ—μ„œ μ‚­μ œλœλ‹€.) 2) Cache Hit: ν•΄μ•Όν•  μž‘μ—…μ΄ μΊμ‹œμ— μžˆλŠ” μƒνƒœλ‘œ μœ„ μƒνƒœμ—μ„œ λ§Œμ•½ 3번 μž‘μ—…μ„ CPUκ°€ μ‚¬μš©ν•œλ‹€λ©΄ Cache Hit이 되고, 3번 μ•žμ— μžˆλŠ” 5, 2번 μž‘μ—…μ€ ν•œ μΉΈ λ’€λ‘œ λ°€λ¦° ν›„ 3번 μž‘μ—…μ€ μΊμ‹œμ˜ 맨 μ•žμ— μœ„μΉ˜ν•œλ‹€. [3, 5, 2, 1, 6..
[JavaScript/section 7] 04 - μ‚½μž… μ •λ ¬
Β·
Algorithm/μΈν”„λŸ°(inflearn)
πŸ“Œ 문제 N개의 μˆ«μžκ°€ μž…λ ₯되면 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜μ—¬ 좜λ ₯ν•˜λŠ” λ¬Έμ œμ΄λ‹€. μ •λ ¬ν•˜λŠ” 방법은 μ‚½μž… 정렬이닀. 🧐 μ‚½μž… μ •λ ¬(insertion sort)μ΄λž€ λ¬΄μ—‡μΌκΉŒβ“ 손 μ•ˆμ˜ μΉ΄λ“œλ₯Ό μ •λ ¬ν•˜λŠ” 방법과 μœ μ‚¬ν•˜λ‹€. μƒˆλ‘œμš΄ μΉ΄λ“œλ₯Ό 기쑴의 μ •λ ¬λœ μΉ΄λ“œ μ‚¬μ΄μ˜ μ˜¬λ°”λ₯Έ 자리λ₯Ό μ°Ύμ•„ μ‚½μž…ν•œλ‹€. μƒˆλ‘œ μ‚½μž…λ  μΉ΄λ“œμ˜ 수만큼 λ°˜λ³΅ν•˜κ²Œ 되면 전체 μΉ΄λ“œκ°€ μ •λ ¬λœλ‹€. 자료 λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μ•žμ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 이미 μ •λ ¬λœ λ°°μ—΄ λΆ€λΆ„κ³Ό λΉ„κ΅ν•˜μ—¬, μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„ μ‚½μž…ν•¨μœΌλ‘œμ¨ 정렬을 μ™„μ„±ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ λ§€ μˆœμ„œλ§ˆλ‹€ ν•΄λ‹Ή μš”μ†Œλ₯Ό μ‚½μž…ν•  수 μžˆλŠ” μœ„μΉ˜λ₯Ό μ°Ύμ•„ ν•΄λ‹Ή μœ„μΉ˜μ— λ„£λŠ”λ‹€. πŸ“ 풀이 πŸ§‘πŸ»‍πŸ’» λ‚˜μ˜ 풀이 방법 function solution(arr) { const answer = []; for (let i = 0; i < arr.l..
[JavaScript/section 7] 03 - Special Sort(ꡬ글 인터뷰)
Β·
Algorithm/μΈν”„λŸ°(inflearn)
πŸ“Œ 03 - Special Sort(ꡬ글 인터뷰) N개의 μ •μˆ˜κ°€ μž…λ ₯되면 μž…λ ₯된 값을 μ •λ ¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. 음의 μ •μˆ˜λŠ” μ•žμͺ½μ— μ–‘μ˜ μ •μˆ˜λŠ” λ’·μͺ½μ— μžˆμ–΄μ•Ό ν•œλ‹€. λ˜ν•œ μ–‘μ˜ μ •μˆ˜μ™€ 음의 μ •μˆ˜μ˜ μˆœμ„œμ—λŠ” 변함이 μ—†μ–΄μ•Ό ν•œλ‹€. πŸ‘ 풀이 방법(κ°•μ‚¬λ‹˜κ³Ό 동일) 버블 μ •λ ¬ 문제의 μ‘μš©μœΌλ‘œ 풀이 방법 λ˜ν•œ 맀우 λΉ„μŠ·ν•˜λ‹€. 자료λ₯Ό κ΅ν™˜ν•˜λŠ” 쑰건만 λ°”κΎΈλ©΄ λœλ‹€. jλ₯Ό λŒλ•Œλ§ˆλ‹€ μ„œλ‘œ μΈμ ‘ν•œ μ›μ†Œ 쀑 μ•žμͺ½ μ›μ†Œ jκ°€ μ–‘μˆ˜μ΄κ³ , λ’€μͺ½ μ›μ†Œ j + 1이 음수이면 κ΅ν™˜ν•˜λ©΄μ„œ 자료λ₯Ό μ •λ ¬ν•œλ‹€. 1νšŒμ „μ„ μˆ˜ν–‰ν•  λ•Œλ§ˆλ‹€ 정렬이 ν™•μ •λ˜λŠ” μžλ£Œκ°€ ν•˜λ‚˜μ”© λŠ˜μ–΄λ‚˜λ―€λ‘œ jκ°€ λ„λŠ” λ²”μœ„λŠ” ν•˜λ‚˜μ”© 쀄어든닀. πŸ“ 풀이 function solution(arr) { // Shallow Copy let answer = arr; for (let i = 0;..
_μ„±ν˜Έ_
'Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (5 Page)