전체 κΈ€ 130

[μ΄μ½”ν…Œ Ch8-5] 효율적인 화폐 ꡬ성 (DP)

πŸ‘©πŸ»β€πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch8-5] 효율적인 화폐 ꡬ성 (DP) N가지 μ’…λ₯˜μ˜ 화폐가 μžˆλ‹€. 이 ν™”νλ“€μ˜ 개수λ₯Ό μ΅œμ†Œν•œμœΌλ‘œ μ΄μš©ν•΄μ„œ κ·Έ κ°€μΉ˜μ˜ 합이 M원이 λ˜λ„λ‘ ν•˜λ €κ³  ν•œλ‹€. μ΄λ•Œ 각 νšŒνλŠ” λͺ‡ κ°œλΌλ„ μ‚¬μš©ν•  수 있으며, μ‚¬μš©ν•œ ν™”νμ˜ ꡬ성은 κ°™μ§€λ§Œ μˆœμ„œλ§Œ λ‹€λ₯Έ 것은 같은 경우둜 κ΅¬λΆ„ν•œλ‹€. 예λ₯Ό λ“€μ–΄ 2원, 3원 λ‹¨μœ„μ˜ 화폐가 μžˆμ„ λ•ŒλŠ” 15원을 λ§Œλ“€κΈ° μœ„ν•΄ 3원을 5개 μ‚¬μš©ν•˜λŠ” 것이 κ°€μž₯ μ΅œμ†Œν•œμ˜ 화폐 κ°œμˆ˜μ΄λ‹€. μž…λ ₯ 쑰건 첫째 쀄에 N, M이 주어진닀. (1

[μ΄μ½”ν…Œ Ch7-2] λΆ€ν’ˆ μ°ΎκΈ° (이진 탐색)

πŸ‘©πŸ»β€πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch7-2] λΆ€ν’ˆ μ°ΎκΈ° (이진 탐색) λ™λΉˆμ΄λ„€ μ „μž 맀μž₯μ—λŠ” λΆ€ν’ˆμ΄ N개 μžˆλ‹€. 각 λΆ€ν’ˆμ€ μ •μˆ˜ ν˜•νƒœμ˜ κ³ μœ ν•œ λ²ˆν˜Έκ°€ μžˆλ‹€. μ–΄λŠ λ‚  μ†λ‹˜μ΄ M개의 μ’…λ₯˜μ˜ λΆ€ν’ˆμ„ λŒ€λŸ‰μœΌλ‘œ κ΅¬λ§€ν•˜κ² λ‹€λ©° 당일 λ‚  κ²¬μ μ„œλ₯Ό μš”μ²­ν–ˆλ‹€. λ™λΉˆμ΄λŠ” λ•Œλ₯Ό λ†“μΉ˜μ§€ μ•Šκ³  μ†λ‹˜μ΄ λ¬Έμ˜ν•œ λΆ€ν’ˆ M개 μ’…λ₯˜λ₯Ό λͺ¨λ‘ ν™•μΈν•΄μ„œ κ²¬μ μ„œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€. μ΄λ•Œ κ°€κ²Œ μ•ˆμ— λΆ€ν’ˆμ΄ λͺ¨λ‘ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μž. 예λ₯Ό λ“€μ–΄ κ°€κ²Œμ˜ λΆ€ν’ˆμ΄ 총 5개일 λ•Œ λΆ€ν’ˆ λ²ˆν˜Έκ°€ λ‹€μŒκ³Ό κ°™λ‹€κ³  ν•˜μž. N=5 [8, 3, 7, 9, 2] μ†λ‹˜μ€ 총 3개의 λΆ€ν’ˆμ΄ μžˆλŠ”μ§€ 확인 μš”μ²­ν–ˆλŠ”λ° λΆ€ν’ˆ λ²ˆν˜ΈλŠ” λ‹€μŒκ³Ό κ°™λ‹€. M=3 [5, 7, 9] μ΄λ•Œ μ†λ‹˜μ΄ μš”μ²­ν•œ λΆ€ν’ˆ 번호의 μˆœμ„œλŒ€λ‘œ λΆ€ν’ˆμ„ 확인해 λΆ€ν’ˆμ΄ 있으면 yesλ₯Ό, μ—†μœΌλ©΄ noλ₯Ό 좜λ ₯..

[μ΄μ½”ν…Œ Ch6-4] 두 λ°°μ—΄μ˜ μ›μ†Œ ꡐ체 (μ •λ ¬)

πŸ‘©πŸ»β€πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch6-4] 두 λ°°μ—΄μ˜ μ›μ†Œ ꡐ체 (μ •λ ¬) λ™λΉˆμ΄λŠ” 두 개의 λ°°μ—΄ A와 Bλ₯Ό 가지고 μžˆλ‹€. 두 배열은 N개의 μ›μ†Œλ‘œ κ΅¬μ„±λ˜μ–΄ 있으며, λ°°μ—΄μ˜ μ›μ†ŒλŠ” λͺ¨λ‘ μžμ—°μˆ˜μ΄λ‹€. λ™λΉˆμ΄λŠ” μ΅œλŒ€ K 번의 λ°”κΏ”μΉ˜κΈ° 연산을 μˆ˜ν–‰ν•  수 μžˆλŠ”λ°, λ°”κΏ”μΉ˜κΈ° μ—°μ‚°μ΄λž€ λ°°μ—΄ A에 μžˆλŠ” μ›μ†Œ ν•˜λ‚˜μ™€ λ°°μ—΄ B에 μžˆλŠ” μ›μ†Œ ν•˜λ‚˜λ₯Ό κ³¨λΌμ„œ 두 μ›μ†Œλ₯Ό μ„œλ‘œ λ°”κΎΈλŠ” 것을 λ§ν•œλ‹€. λ™λΉˆμ΄μ˜ μ΅œμ’… λͺ©ν‘œλŠ” λ°°μ—΄ A의 λͺ¨λ“  μ›μ†Œμ˜ 합이 μ΅œλŒ€κ°€ λ˜λ„λ‘ ν•˜λŠ” 것이며, μ—¬λŸ¬λΆ„μ€ λ™λΉˆμ΄λ₯Ό λ„μ™€μ•Όν•œλ‹€. N, K, 그리고 λ°°μ—΄ A와 B의 정보가 μ£Όμ–΄μ‘Œμ„ λ•Œ, μ΅œλŒ€ K 번의 λ°”κΏ”μΉ˜κΈ° 연산을 μˆ˜ν–‰ν•˜μ—¬ λ§Œλ“€ 수 μžˆλŠ” λ°°μ—΄ A의 λͺ¨λ“  μ›μ†Œμ˜ ν•©μ˜ μ΅œλŒ“κ°’μ„ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ. 예λ₯Ό λ“€μ–΄ N = 5, K = 3이고, λ°°μ—΄ A와 Bκ°€ ..

[μ΄μ½”ν…Œ Ch5-4] λ―Έλ‘œνƒˆμΆœ (BFS)

πŸ‘©πŸ»β€πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch5-4] λ―Έλ‘œνƒˆμΆœ (BFS) N x M 크기의 μ§μ‚¬κ°ν˜• ν˜•νƒœμ˜ λ―Έλ‘œμ— μ—¬λŸ¬ 마리의 괴물이 μžˆμ–΄ 이λ₯Ό ν”Όν•΄ νƒˆμΆœν•΄μ•Ό ν•œλ‹€. ν˜„μž¬ μœ„μΉ˜λŠ” (1, 1)이고 미둜의 μΆœκ΅¬λŠ” (N,M)의 μœ„μΉ˜μ— μ‘΄μž¬ν•˜λ©° ν•œ λ²ˆμ— ν•œ μΉΈμ”© 이동할 수 μžˆλ‹€. 괴물이 μžˆλŠ” 뢀뢄은 0으둜, 괴물이 μ—†λŠ” 뢀뢄은 1둜 ν‘œμ‹œλ˜μ–΄ μžˆλ‹€. λ―Έλ‘œλŠ” λ°˜λ“œμ‹œ νƒˆμΆœν•  수 μžˆλŠ” ν˜•νƒœλ‘œ μ œμ‹œλœλ‹€. νƒˆμΆœν•˜κΈ° μœ„ν•΄ 움직여야 ν•˜λŠ” μ΅œμ†Œ 칸의 개수λ₯Ό κ΅¬ν•˜λΌ. 칸을 μ…€ λ•ŒλŠ” μ‹œμž‘ μΉΈκ³Ό λ§ˆμ§€λ§‰ 칸을 λͺ¨λ‘ ν¬ν•¨ν•΄μ„œ κ³„μ‚°ν•œλ‹€. μž…λ ₯ 첫째 쀄에 두 μ •μˆ˜ N, M(4

[μ΄μ½”ν…Œ Ch4-1] μƒν•˜μ’Œμš° (κ΅¬ν˜„)

πŸ‘©πŸ»β€πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch4-1] μƒν•˜μ’Œμš° (κ΅¬ν˜„) μ—¬ν–‰κ°€ AλŠ” N Γ— N 크기의 μ •μ‚¬κ°ν˜• 곡간 μœ„μ— μ„œ μžˆλ‹€. 이 곡간은 1 Γ— 1 크기의 μ •μ‚¬κ°ν˜•μœΌλ‘œ λ‚˜λˆ„μ–΄μ Έ μžˆλ‹€. κ°€μž₯ μ™Όμͺ½ μœ„ μ’Œν‘œλŠ” (1, 1)이며, κ°€μž₯ 였λ₯Έμͺ½ μ•„λž˜ μ’Œν‘œλŠ” (N, N)에 ν•΄λ‹Ήν•œλ‹€. μ—¬ν–‰κ°€ AλŠ” 상, ν•˜, 쒌, 우 λ°©ν–₯으둜 이동할 수 있으며, μ‹œμž‘ μ’Œν‘œλŠ” 항상 (1, 1)이닀. 우리 μ•žμ—λŠ” μ—¬ν–‰κ°€ Aκ°€ 이동할 κ³„νšμ΄ 적힌 κ³„νšμ„œκ°€ 놓여 μžˆλ‹€. κ³„νšμ„œμ—λŠ” ν•˜λ‚˜μ˜ 쀄에 띄어쓰기λ₯Ό κΈ°μ€€μœΌλ‘œ L, R, U, D 쀑 ν•˜λ‚˜μ˜ λ¬Έμžκ°€ 반볡적으둜 μ ν˜€μžˆλ‹€. 각 문자의 μ˜λ―ΈλŠ” λ‹€μŒκ³Ό κ°™λ‹€. L: μ™Όμͺ½μœΌλ‘œ ν•œ μΉΈ 이동 R: 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈ 이동 U: μœ„λ‘œ ν•œ μΉΈ 이동 D: μ•„λž˜λ‘œ ν•œ μΉΈ 이동 μ΄λ•Œ μ—¬ν–‰κ°€ Aκ°€ N Γ— N 크기의 μ •μ‚¬κ°ν˜• 곡간..

[μ΄μ½”ν…Œ Ch3-4] 1이 될 λ•ŒκΉŒμ§€ (그리디)

πŸ‘©πŸ»β€πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch3-4] 1이 될 λ•ŒκΉŒμ§€ (그리디) μ–΄λ– ν•œ 수 N이 1이 될 λ•Œ κΉŒμ§€ λ‹€μŒμ˜ 두 κ³Όμ • 쀑 ν•˜λ‚˜λ₯Ό 반볡적으둜 μ„ νƒν•˜μ—¬ μˆ˜ν–‰ν•˜λ €κ³  ν•œλ‹€. 단, λ‘λ²ˆμ§Έ 연산은 N이 K둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§ˆ λ•Œλ§Œ 선택할 수 μžˆλ‹€. 1. Nμ—μ„œ 1을 λΊ€λ‹€. 2. N을 K둜 λ‚˜λˆˆλ‹€. (N이 K둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§ˆ λ•Œλ§Œ 선택가λŠ₯) 예λ₯Ό λ“€μ–΄ N이 17, Kκ°€ 4라고 κ°€μ •ν•˜μž. μ΄λ•Œ 1번의 과정을 ν•œ 번 μˆ˜ν–‰ν•˜λ©΄ N은 16이 λœλ‹€. 이후에 2번의 과정을 두 번 μˆ˜ν–‰ν•˜λ©΄ N은 1이 λœλ‹€. 결과적으둜 이경우 전체과정을 μ‹€ν–‰ν•œ νšŸμˆ˜λŠ” 3μ΄λœλ‹€. μ΄λŠ” N을 1둜 λ§Œλ“œλŠ” μ΅œμ†Œ νšŸμˆ˜μ΄λ‹€. Nκ³Ό Kκ°€ μ£Όμ–΄μ§ˆ λ•Œ N이 1이 될 λ•ŒκΉŒμ§€ 1번 ν˜Ήμ€ 2번의 과정을 μˆ˜ν–‰ν•΄μ•Όν•˜λŠ” μ΅œμ†Œ 횟수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. μž…λ ₯쑰건 첫째쀄에 ..

λ©€ν‹° νƒœμŠ€ν‚Ή, λ©€ν‹° ν”„λ‘œκ·Έλž˜λ°, λ©€ν‹° ν”„λ‘œμ„Έμ‹±, λ©€ν‹° μ½”μ–΄, λ©€ν‹° ν”„λ‘œμ„ΈμŠ€, λ©€ν‹° μŠ€λ ˆλ“œ

λ©€ν‹° νƒœμŠ€ν‚Ή (닀쀑 μž‘μ—… 운영체제) λ™μ‹œμ— 2개 μ΄μƒμ˜ ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν–‰ν•˜λŠ” 닀쀑 μž‘μ—… 운영체제λ₯Ό λ§ν•œλ‹€. OS μŠ€μΌ€μ€„λ§κ³Ό CPU μ‹œλΆ„ν• μ„ 톡해 λ‹€μˆ˜μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ „ν™˜ν•˜λŠ” λ©€ν‹° ν”„λ‘œκ·Έλž˜λ°μ„ 톡해 λ©€ν‹° νƒœμŠ€ν‚Ήμ„ κ΅¬ν˜„ν–ˆλ‹€. λ©€ν‹° ν”„λ‘œκ·Έλž˜λ° (닀쀑 ν”„λ‘œκ·Έλž˜λ° μ‹œμŠ€ν…œ) ν”„λ‘œμ„Έμ„œλž€? ν”„λ‘œμ„ΈμŠ€κ°€ λ™μž‘ν•˜λ„λ‘ ν•˜λŠ” ν•˜λ“œμ›¨μ–΄(= CPU) ν”„λ‘œκ·Έλž¨μ΄λž€? μ–΄λ–€ μž‘μ—…μ„ μœ„ν•΄ 운영체제 μœ„μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” 파일 ν”„λ‘œμ„ΈμŠ€λž€? 운영체제 μœ„μ—μ„œ μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨ ν•˜λ‚˜μ˜ CPUκ°€ 2개 μ΄μƒμ˜ ν”„λ‘œκ·Έλž¨μ„ μ „ν™˜ν•œλ‹€. CPUκ°€ 유휴 μƒνƒœμΌ λ•Œ μ‹€ν–‰ 쀑인 λ‘˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό μ „ν™˜ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ™μž‘ν•œλ‹€. (Context switching) 즉, μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ„ λ©”λͺ¨λ¦¬μ— μ μž¬ν•œ ν›„ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό μ‚¬μš©ν•˜λ‹€κ°€, μž…..

CS 곡뢀 2021.12.09

μΈλ±μŠ€κ°€μ— Hash보닀 B-TREEλ₯Ό μ“°λŠ” 이유?

Buckets (Hash Table)λŠ” O(1)둜 νƒμƒ‰μ‹œκ°„μ΄ λΉ λ₯΄λ‹€ Hash ν•¨μˆ˜λŠ” μž…λ ₯ κ°’(keys)이 λ“€μ–΄μ˜€λ©΄ μ–Έμ œλ‚˜ 같은 좜λ ₯ κ°’(Hash κ°’)을 가짐 buckets의 index κ°’μœΌλ‘œ λ§€ν•‘λ˜μ–΄ 찾고자 ν•˜λŠ” 데이터λ₯Ό 얻을 수 있음 미리 μ €μž₯된 λ©”λͺ¨λ¦¬ 곡간(buckets)에 ν•œ λ²ˆμ— 접근을 ν•˜κΈ° λ•Œλ¬Έμ—, 탐색 μ‹œκ°„μ΄ O(1)둜 빠름 Hash 값이 좩돌이 μΌμ–΄λ‚˜λŠ” λ“±μ˜ μ΅œμ•…μ˜ 경우, O(N)이 될 μˆ˜λ„ 있음 νƒμƒ‰μ‹œκ°„μ΄ λΉ λ₯Έ Hashκ°€ 인덱슀둜 μ μ ˆν•˜μ§€ μ•Šμ€ 이유 단 ν•˜λ‚˜μ˜ 데이터λ₯Ό νƒμƒ‰ν•˜λŠ” μ‹œκ°„μ΄ O(1)으둜 λΉ λ₯Έ 것이닀. Hash Table에 μ €μž₯λ˜λŠ” 값듀은 μ •λ ¬λ˜μ–΄ μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— νŠΉμ • 값보닀 ν¬κ±°λ‚˜ μž‘μ€ 값을 찾을 수 μ—†λ‹€. SQL μΏΌλ¦¬λ¬Έμ—μ„œ νŠΉμ • λ²”μœ„μ˜ 값을 μ‘°νšŒν•˜λŠ” 경우, νŠΉμ • 값보닀 ν¬κ±°λ‚˜..

CS 곡뢀 2021.11.29

Redis

WEB-WAS-DB의 μ „ν˜•μ μΈ 3ν‹°μ–΄ ꡬ쑰 -> μ‚¬μš©μžκ°€ λŠ˜μ–΄λ‚˜λ©΄ DB에 슬슬 무리가 κ°€κΈ° μ‹œμž‘ 맀 transaction λ§ˆλ‹€ λ””μŠ€ν¬μ— μ ‘κ·Όν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— λΆ€ν•˜κ°€ λ§Žμ•„μ§€λ©΄ μƒλ‹Ήνžˆ 느렀짐 μ‚¬μš©μžκ°€ λŠ˜μ–΄λ‚˜λ©΄ DBλ§ŒμœΌλ‘œλŠ” λΆ€ν•˜λ₯Ό κ²¬λ”œ 수 μ—†μ–΄ μΊμ‹œμ„œλ²„ λ„μž… μΊμ‹œ ν•œ 번 μ½μ–΄μ˜¨ 데이터λ₯Ό μž„μ˜μ˜ 곡간에 μ €μž₯ν•˜μ—¬ λ‹€μŒμ— 읽을 λ•ŒλŠ” λΉ λ₯΄κ²Œ 결과값을 받을 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 곡간 같은 μš”μ²­μ΄ μ—¬λŸ¬λ²ˆ λ“€μ–΄μ˜€λŠ” 경우 μΊμ‹œμ„œλ²„μ—μ„œ λ°”λ‘œ 결과값을 λ°˜ν™˜ DBλΆ€ν•˜λ₯Ό 쀄일 수 있음, μ„œλΉ„μŠ€μ˜ κ°œμ„  cache Hit ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ήμ„œλ²„μ— μš”μ²­ μ›Ήμ„œλ²„λŠ” 데이터λ₯Ό DBμ—μ„œ κ°€μ Έμ˜€κΈ° 전에 Cache에 데이터가 μžˆλŠ”μ§€ 확인 Cacheμ„œλ²„μ— 데이터가 있으면, 데이터λ₯Ό DB에 데이터λ₯Ό μš”μ²­ν•˜μ§€ μ•Šκ³  λ°”λ‘œ ν΄λΌμ΄μ–ΈνŠΈμ— 데이터λ₯Ό λ°˜ν™˜ cache ..

CS 곡뢀 2021.11.25

μ—­μ •κ·œν™”

λΉ„μ •κ·œν™”(Unnormalized form) : μ •κ·œν™”λœ ν…Œμ΄λΈ”(λ¦΄λ ˆμ΄μ…˜)을 읽기성λŠ₯ ν–₯상을 μœ„ν•΄ ν…Œμ΄λΈ”μ„ λ‹€μ‹œ ν•©μΉ˜λŠ” 방법 μ—­μ •κ·œν™”(Denormalization) : μ •κ·œν™”λœ ν…Œμ΄λΈ”μ„ λΉ„μ •κ·œν™” μƒνƒœλ‘œ λ§Œλ“€κΈ° μœ„ν•œ 방법 쀑 ν•˜λ‚˜ (λΉ„μ •κ·œν™”κ°€ 더 포괄적) μ—­μ •κ·œν™”λ₯Ό ν•˜λŠ” 이유 μ½κΈ°μž‘μ—…μ΄ 많이 ν•„μš”ν•œ ν…Œμ΄λΈ”μ˜ 읽기성λŠ₯ ν–₯상을 μœ„ν•΄μ„œ λΉ„μ •κ·œν™” μƒνƒœλ‘œ λ§Œλ“œλŠ” μ—­μ •κ·œν™” ν”„λ‘œμ„ΈμŠ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ™„λ²½ν•œ ꡬ쑰섀계λ₯Ό ν¬κΈ°ν•˜κ³  λ°μ΄ν„°μ˜ 무결성을 λ–¨μ–΄νŠΈλ¦¬λŠ” λŒ€μ‹  κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ 읽기(Read)μ„±λŠ₯ ν–₯상을 μœ„ν•œ 섀계 방법 μ •κ·œν™”λ₯Ό 톡해 λΆ„λ¦¬λ˜μ—ˆλ˜ λ¦΄λ ˆμ΄μ…˜μ—μ„œ 쀑볡을 ν—ˆμš©ν•˜κ³  λ‹€μ‹œ ν†΅ν•©ν•˜κ±°λ‚˜ λΆ„ν• ν•˜μ—¬ ꡬ쑰λ₯Ό μž¬μ‘°μ •ν•˜λŠ” κ³Όμ • μ •κ·œν™”λœ λ¦΄λ ˆμ΄μ…˜μ˜ μ„±λŠ₯ μ €ν•˜ μš”μΈ 1. JOIN μ—°μ‚° μ •κ·œν™”λœ ν…Œμ΄λΈ”μ—μ„œλŠ” 3가지 ν…Œμ΄λΈ”μ„ 같은 ν‚€..

CS 곡뢀 2021.11.18