Inflearn

Algorithm/μΈν”„λŸ°(inflearn)

[JavaScript/section 10] 05 - μ΅œλŒ€μ μˆ˜ κ΅¬ν•˜κΈ°

πŸ“Œ μ΅œλŒ€μ μˆ˜ κ΅¬ν•˜κΈ°(냅색 μ•Œκ³ λ¦¬μ¦˜) 이번 μ •λ³΄μ˜¬λ¦Όν”Όμ•„λ“œλŒ€νšŒμ—μ„œ 쒋은 성적을 λ‚΄κΈ° μœ„ν•˜μ—¬ ν˜„μˆ˜λŠ” μ„ μƒλ‹˜μ΄ μ£Όμ‹  N개의 문제λ₯Ό ν’€λ €κ³  ν•œλ‹€. 각 λ¬Έμ œλŠ” 그것을 ν’€μ—ˆμ„ λ•Œ μ–»λŠ” μ μˆ˜μ™€ ν‘ΈλŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ§€κ²Œ λœλ‹€. μ œν•œ μ‹œκ°„ M μ•ˆμ— N개의 문제 쀑 μ΅œλŒ€μ μˆ˜λ₯Ό 얻을 수 μžˆλ„λ‘ ν•΄μ•Ό ν•œλ‹€. (ν•΄λ‹Ή λ¬Έμ œλŠ” ν•΄λ‹Ή μ‹œκ°„μ΄ 걸리면 ν‘ΈλŠ” 걸둜 κ°„μ£Όν•œλ‹€. ν•œ μœ ν˜•λ‹Ή ν•œ 개만 ν’€ 수 μžˆλ‹€.) μž…λ ₯μ„€λͺ… 첫 번째 쀄에 문제의 개수 N(1

Algorithm/μΈν”„λŸ°(inflearn)

[JavaScript/section 10] 04 - λ™μ „κ΅ν™˜

πŸ“Œ λ™μ „κ΅ν™˜(냅색 μ•Œκ³ λ¦¬μ¦˜) λ‹€μŒκ³Ό 같이 μ—¬λŸ¬ λ‹¨μœ„μ˜ 동전듀이 μ£Όμ–΄μ Έ μžˆμ„λ•Œ κ±°μŠ€λ¦„λˆμ„ κ°€μž₯ 적은 수의 λ™μ „μœΌλ‘œ κ΅ν™˜ν•΄μ£Όλ €λ©΄ μ–΄λ–»κ²Œ μ£Όλ©΄ λ˜λŠ”κ°€? 각 λ‹¨μœ„μ˜ 동전은 λ¬΄ν•œμ • μ“Έ 수 μžˆλ‹€. μž…λ ₯μ„€λͺ… 첫 번째 μ€„μ—λŠ” λ™μ „μ˜ μ’…λ₯˜κ°œμˆ˜ N(1

Algorithm/μΈν”„λŸ°(inflearn)

[JavaScript/section 10] 03 - μ΅œλŒ€ λΆ€λΆ„ 증가 μˆ˜μ—΄

πŸ“Œ μ΅œλŒ€ λΆ€λΆ„ μ¦κ°€μˆ˜μ—΄(LIS) N개의 μžμ—°μˆ˜λ‘œ 이루어진 μˆ˜μ—΄μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ·Έμ€‘μ—μ„œ κ°€μž₯ 길게 μ¦κ°€ν•˜λŠ”(μž‘μ€ μˆ˜μ—μ„œ 큰 수둜) μ›μ†Œλ“€μ˜ 집합을 μ°ΎλŠ” λ¬Έμ œμ΄λ‹€. 예λ₯Ό λ“€μ–΄, μ›μ†Œκ°€ 2, 7, 5, 8, 6, 4, 7, 12, 3이면 κ°€μž₯ 길게 μ¦κ°€ν•˜λ„λ‘ μ›μ†Œλ“€μ„ μ°¨λ‘€λŒ€λ‘œ 뽑아내면 2, 5, 6, 7, 12λ₯Ό 뽑아내어 길이가 5인 μ΅œλŒ€ λΆ€λΆ„ 증가 μˆ˜μ—΄μ„ λ§Œλ“€ 수 μžˆλ‹€. μž…λ ₯μ„€λͺ… 첫째 쀄은 μž…λ ₯λ˜λŠ” λ°μ΄ν„°μ˜ 수 N(1= 0; j--) { if (arr[j] < arr[i] && max < dy[j]) { max = dy[j]; } } dy[i] = max + 1; } answer = Math.max(...dy); return answer; } let arr = [2, 7, 5, 8, 6, 4, 7, 12,..

Algorithm/μΈν”„λŸ°(inflearn)

[JavaScript/section 10] 02 - λŒλ‹€λ¦¬ κ±΄λ„ˆκΈ°

πŸ“Œ 02 - λŒλ‹€λ¦¬ κ±΄λ„ˆκΈ°(DP) μ² μˆ˜λŠ” 학ꡐ에 κ°€λŠ”λ° κ°œμšΈμ„ λ§Œλ‚¬λ‹€. κ°œμšΈμ€ N개의 돌둜 닀리λ₯Ό λ§Œλ“€μ–΄ λ†“μ•˜λ‹€. μ² μˆ˜λŠ” 돌 닀리λ₯Ό 건널 λ•Œ ν•œ λ²ˆμ— ν•œ μΉΈ λ˜λŠ” 두 μΉΈμ”© κ±΄λ„ˆλ›°λ©΄μ„œ λŒλ‹€λ¦¬λ₯Ό 건널 수 μžˆλ‹€. μ² μˆ˜κ°€ κ°œμšΈμ„ κ±΄λ„ˆλŠ” 방법은 λͺ‡κ°€μ§€μΌκΉŒ? πŸ“ μ†ŒμŠ€ μ½”λ“œ μ°Έκ³ ) κ³„λ‹¨μ˜€λ₯΄κΈ° function solution(n) { let answer = 0; let dy = Array.from({ length: n + 2 }, () => 0); dy[1] = 1; dy[2] = 2; for (let i = 3; i

Algorithm/μΈν”„λŸ°(inflearn)

[JavaScript/section 10] 01 - κ³„λ‹¨μ˜€λ₯΄κΈ°

πŸ“Œ 01 - κ³„λ‹¨μ˜€λ₯΄κΈ°(동적 κ³„νšλ²•) μ² μˆ˜λŠ” 계단을 였λ₯Ό λ•Œ ν•œ λ²ˆμ— ν•œ 계단 λ˜λŠ” 두 계단씩 μ˜¬λΌκ°„λ‹€. λ§Œμ•½ 총 4계단을 였λ₯Έλ‹€λ©΄ κ·Έ λ°©λ²•μ˜ μˆ˜λŠ” 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2둜 5가지이닀. κ·Έλ ‡λ‹€λ©΄ 총 N계단일 λ•Œ μ² μˆ˜κ°€ 올라갈 수 μžˆλŠ” λ°©λ²•μ˜ μˆ˜λŠ” λͺ‡ 가지인가? πŸ“ 풀이 방법(DFS, DP) DFS μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό ν’€μ–΄λ³΄μ•˜λ‹€. 정닡은 ν›Œλ₯­ν•˜κ²Œλ„ 잘 λ‚˜μ˜¨λ‹€ πŸ‘ ν•˜μ§€λ§Œ n의 값이 컀진닀면...❓ μ—°μ‚° νšŸμˆ˜κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•˜κ²Œ λœλ‹€. 이λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” λ°©λ²•μœΌλ‘œ 동적 κ³„νšλ²•(dynamic programming, DP)이 μ‘΄μž¬ν•œλ‹€. function solution(n) { let answer = 0; function DFS(sum) { if (sum > n)..

Algorithm/μΈν”„λŸ°(inflearn)

[JavaScript/section 9] 07 - μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ(BFS)

πŸ“Œ 07 - μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ(BFS ν™œμš©) N*N의 μ„¬λ‚˜λΌ μ•„μΌλžœλ“œμ˜ 지도가 격자판의 μ •λ³΄λ‘œ 주어진닀. 각 섬은 1둜 ν‘œμ‹œλ˜μ–΄ μƒν•˜μ’Œμš°μ™€ λŒ€κ°μ„ μœΌλ‘œ μ—°κ²°λ˜μ–΄ 있으며, 0은 바닀이닀. μ„¬λ‚˜λΌ μ•„μΌλžœλ“œμ— λͺ‡ 개의 섬이 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. λ§Œμ•½ μœ„μ™€ κ°™λ‹€λ©΄ μ„¬μ˜ κ°œμˆ˜λŠ” 총 5κ°œμ΄λ‹€. μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ(DFS) λ¬Έμ œμ™€ κ°™μ§€λ§Œ μ΄λ²ˆμ—λŠ” BFS μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄ ν’€μ–΄λ³΄μ•˜λ‹€. μ˜μ—­μ„ νƒμƒ‰ν•˜λŠ” 문제의 κ²½μš°μ—λŠ” λ³ΈμΈμ—κ²Œ νŽΈν•œ 방법을 μ΄μš©ν•˜μ—¬ ν’€λ©΄ 될 것 κ°™λ‹€..πŸ€” πŸ“ 풀이 방법 이쀑 for 문을 λŒλ©΄μ„œ 1이 λ‚˜μ˜¨λ‹€λ©΄ 섬을 λ°œκ²¬ν•œ κ²ƒμ΄λ―€λ‘œ λ°°μ—΄μ—μ„œ ν•΄λ‹Ή μ’Œν‘œλ₯Ό 0으둜 μž¬ν• λ‹Ήν•˜κ³  answer++을 ν•œλ‹€. λ˜ν•œ, 넓이 μš°μ„  탐색을 μœ„ν•΄ 큐에 ν•΄λ‹Ή μ’Œν‘œλ₯Ό μΆ”κ°€ν•œλ‹€. while 문을 λŒλ©΄μ„œ νμ—μ„œ shift ν•œ μ’Œν‘œμ— λŒ€ν•΄ ..

Algorithm/μΈν”„λŸ°(inflearn)

[JavaScript/section 9] 06 - μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ(DFS)

πŸ“Œ 06 - μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ(DFS ν™œμš©) N*N의 μ„¬λ‚˜λΌ μ•„μΌλžœλ“œμ˜ 지도가 격자판의 μ •λ³΄λ‘œ 주어진닀. 각 섬은 1둜 ν‘œμ‹œλ˜μ–΄ μƒν•˜μ’Œμš°μ™€ λŒ€κ°μ„ μœΌλ‘œ μ—°κ²°λ˜μ–΄ 있으며, 0은 바닀이닀. μ„¬λ‚˜λΌ μ•„μΌλžœλ“œμ— λͺ‡ 개의 섬이 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. λ§Œμ•½ μœ„μ™€ κ°™λ‹€λ©΄ μ„¬μ˜ κ°œμˆ˜λŠ” 총 5κ°œμ΄λ‹€. πŸ“ 풀이 방법 미둜 탐색 λ¬Έμ œμ™€ μœ μ‚¬ν•œ λ¬Έμ œμ΄λ―€λ‘œ μ°Έκ³ ν•˜λ©΄ 쒋을 λ“―ν•˜λ‹€. 이쀑 for 문을 λŒλ©΄μ„œ 1이 λ‚˜μ˜¨λ‹€λ©΄ 섬을 λ°œκ²¬ν•œ κ²ƒμ΄λ―€λ‘œ λ°°μ—΄μ—μ„œ ν•΄λ‹Ή μ’Œν‘œλ₯Ό 0으둜 μž¬ν• λ‹Ήν•˜κ³  answer++을 ν•œλ‹€. ν•΄λ‹Ή μ’Œν‘œμ— λŒ€ν•΄ DFSλ₯Ό λŒλ©΄μ„œ μƒν•˜μ’Œμš°μ™€ λŒ€κ°μ„ μœΌλ‘œ μ—°κ²°λœ μ’Œν‘œκ°€ μžˆλŠ”μ§€ νƒμƒ‰ν•œλ‹€. μ—°κ²°λœ μ’Œν‘œκ°€ μžˆλ‹€λ©΄ 0으둜 재 ν• λ‹Ήν•˜κ³  μ—°κ²°λœ μ’Œν‘œλ‘œ μ΄λ™ν•œλ‹€. 더 이상 μ—°κ²°λœ μ’Œν‘œκ°€ μ—†λ‹€λ©΄ DFS ν•¨μˆ˜λ₯Ό λͺ¨λ‘ μ’…λ£Œν•˜κ³  이쀑 for 문을..

Algorithm/μΈν”„λŸ°(inflearn)

[JavaScript/section 9] 05 - 솑아지 μ°ΎκΈ°

πŸ“Œ 05 - 솑아지 μ°ΎκΈ°(BFS : μƒλŒ€νŠΈλ¦¬νƒμƒ‰) ν˜„μˆ˜λŠ” 솑아지λ₯Ό μžƒμ–΄λ²„λ Έλ‹€. λ‹€ν–‰νžˆ μ†‘μ•„μ§€μ—λŠ” μœ„μΉ˜μΆ”μ κΈ°κ°€ 달렀 μžˆλ‹€. ν˜„μˆ˜μ˜ μœ„μΉ˜μ™€ μ†‘μ•„μ§€μ˜ μœ„μΉ˜κ°€ μˆ˜μ§μ„ μƒμ˜ μ’Œν‘œ 점으둜 주어지면 ν˜„μˆ˜λŠ” ν˜„μž¬ μœ„μΉ˜μ—μ„œ μ†‘μ•„μ§€μ˜ μœ„μΉ˜κΉŒμ§€ λ‹€μŒκ³Ό 같은 λ°©λ²•μœΌλ‘œ μ΄λ™ν•œλ‹€. μ†‘μ•„μ§€λŠ” 움직이지 μ•Šκ³  μ œμžλ¦¬μ— μžˆλ‹€. ν˜„μˆ˜λŠ” 슀카이 콩콩을 타고 κ°€λŠ”λ° ν•œ 번의 μ ν”„λ‘œ μ•žμœΌλ‘œ 1, λ’€λ‘œ 1, μ•žμœΌλ‘œ 5λ₯Ό 이동할 수 μžˆλ‹€. μ΅œμ†Œ λͺ‡ 번의 μ ν”„λ‘œ ν˜„μˆ˜κ°€ μ†‘μ•„μ§€μ˜ μœ„μΉ˜κΉŒμ§€ 갈 수 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. πŸ“ μž…λ ₯μ„€λͺ… 첫 번째 쀄에 ν˜„μˆ˜μ˜ μœ„μΉ˜ S와 μ†‘μ•„μ§€μ˜ μœ„μΉ˜ Eκ°€ 주어진닀. μ§μ„ μ˜ μ’Œν‘œ 점은 1λΆ€ν„° 10,000κΉŒμ§€μ΄λ‹€. πŸ“ 좜λ ₯μ„€λͺ… μ ν”„μ˜ μ΅œμ†ŒνšŸμˆ˜λ₯Ό κ΅¬ν•œλ‹€. 닡은 1 이상이닀. 문제λ₯Ό ν•΄μ„ν•˜λ©΄ ν˜„μˆ˜μ˜ μœ„μΉ˜(좜발 지점)μ—μ„œ μ†‘μ•„μ§€μ˜ ..

ν”„λ‘ νŠΈμ—”λ“œ μ—”μ§€λ‹ˆμ–΄
'Inflearn' νƒœκ·Έμ˜ κΈ€ λͺ©λ‘