λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Problem Solving/Algorithm, Tips9

Trie (Prefix tree) κ°œλ… n-ary tree의 λ³€μ’…μœΌλ‘œ 각 λ…Έλ“œμ— 문자λ₯Ό μ €μž₯ν•˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€. 트리λ₯Ό μ•„λž˜μͺ½μœΌλ‘œ μˆœνšŒν•˜λ©΄ 단어 ν•˜λ‚˜κ°€ λ‚˜μ˜¨λ‹€. * λ…Έλ“œ * λ…Έλ“œλŠ” 널 λ…Έλ“œλΌκ³ λ„ 뢈리며 λ‹¨μ–΄μ˜ 끝을 λ‚˜νƒ€λ‚Έλ‹€. TrieNodeλ₯Ό μƒμ†ν•œ TerminatingTrieNode둜 ν‘œν˜„ν•  μˆ˜λ„ 있고 * λ…Έλ“œμ˜ λΆ€λͺ¨ λ…Έλ“œ μ•ˆμ— boolean flagλ₯Ό μƒˆλ‘œ μ •μ˜ν•΄ λ‹¨μ–΄μ˜ 끝을 ν‘œν˜„ν•  μˆ˜λ„ μžˆλ‹€. μžμ‹ λ…Έλ“œ 개수 * λ…Έλ“œλ‘œ λ‹¨μ–΄μ˜ 끝을 ν‘œν˜„ν•˜λ©΄ 각 λ…Έλ“œλŠ” 1개 ~ (ALPHABET_SIZE + 1)κ°œκΉŒμ§€ μžμ‹μ„ κ°–κ³  μžˆμ„ 수 μžˆλ‹€. 단 * λ…Έλ“œ λŒ€μ‹  boolean flag둜 ν‘œν˜„ν–ˆλ‹€λ©΄ 0개 ~ ALPHABET_SIZEκ°œκΉŒμ§€. ν™œμš© 접두사λ₯Ό λΉ λ₯΄κ²Œ 찾아보기 μœ„ν•΄ λͺ¨λ“  λ¬Έμžμ—΄μ„ νŠΈλΌμ΄μ— μ €μž₯해놓을 수 μžˆλ‹€. ν•΄μ‹œν…Œμ΄λΈ”μ„ μ΄μš©ν•˜λ©΄ 주어진 문자.. 2020. 6. 29.
[Leetcode] Min Stack 155. Min Stack 문제 μš”μ•½: push(), pop(), top(), getMin()을 μ§€μ›ν•˜λŠ” μŠ€νƒμ„ λ””μžμΈν•˜λΌ. getMin()은 μŠ€νƒ λ‚΄ μ΅œμ†Œ μ›μ†Œλ₯Ό λ°˜ν™˜ν•˜λ©° μƒμˆ˜ μ‹œκ°„μ— μ™„λ£Œλ˜μ–΄μ•Ό ν•œλ‹€. 생각 1: getMin()을 μƒμˆ˜ μ‹œκ°„μ— ν•˜λŠ” 것이 포인트. push() ν•  λ•Œλ§ˆλ‹€ min을 μ—…λ°μ΄νŠΈ ν•˜λŠ” 것은 어렡지 μ•Šμ§€λ§Œ, min이 pop() 될 경우 μ§μ „μ˜ min κ°’μœΌλ‘œ roll back ν•΄μ•Όν•œλ‹€. ν•˜μ§€λ§Œ μ§μ „μ˜ min 값을 λ‹€ μ €μž₯ν•΄λ‘˜ μˆ˜κ°€ μ—†μœΌλ―€λ‘œ (벑터λ₯Ό μ΄μš©ν•΄ μ €μž₯ν•΄λ‘˜ μˆ˜λŠ” μžˆκ² μ§€λ§Œ μ˜λ―Έκ°€ μ—†λ‹€κ³  μƒκ°ν–ˆμŒ) κ·Έλƒ₯ 벑터 ν•˜λ‚˜μ™€ μ…‹ ν•˜λ‚˜λ₯Ό μ΄μš©ν•΄ ν•΄κ²°ν•΄μ•Όκ² λ‹€κ³  μƒκ°ν–ˆλ‹€. 생각 2: 벑터 ν•˜λ‚˜μ™€ μ…‹ ν•˜λ‚˜λ₯Ό λͺ¨λ‘ μ“°λŠ” 게 λΉ„νš¨μœ¨μ μ΄λΌλŠ” 생각이 λ“€μ–΄μ„œ μ•„λž˜μ™€ 같은 struct Nodeλ₯Ό λ§Œλ“€κ³  s.. 2020. 6. 28.
λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ€ 1) 큰 문제λ₯Ό μž‘μ€ 문제둜 λ‚˜λˆŒ 수 있고 2) μž‘μ€ 문제의 닡이 큰 λ¬Έμ œμ—μ„œλ„ 동일할 λ•Œ ν•˜λ‚˜μ˜ λ¬Έμ œλŠ” ν•œ 번만 풀도둝 Memoization ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. κ°€λ Ή ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ„ ꡬ할 λ•Œ fib(15)λ₯Ό κ΅¬ν•˜λ €λ©΄ fib(14) + fib(13)을 ꡬ해야 ν•˜λŠ”λ°, μœ„ 그림처럼 λ™μΌν•œ 계산을 맀우 μ—¬λŸ¬ 번 ν•΄μ•Ό 함을 μ•Œ 수 μžˆλ‹€. λ”°λΌμ„œ ν•œ 번 κ³„μ‚°ν•œ 값을 배열에 memo ν•΄ 두고, 배열에 memo ν•΄ λ‘” 값이 μžˆλ‹€λ©΄ 그것을 λ°˜ν™˜ν•˜κ³  값이 μ—†λ‹€λ©΄ (처음 κ³„μ‚°ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ) κ³„μ‚°ν•˜κ³  memo ν•˜λ©΄ λœλ‹€. μΆœμ²˜λŠ” 사진 μ•„λž˜ 링크 2020. 6. 24.
μ΅œλŒ€ 연속 λΆ€λΆ„ μˆ˜μ—΄μ˜ ν•© (μ•„λž˜ μͺ½μ— update 있음) μ™œ 이 λ¬Έμ œλŠ” λ³Ό λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄κ±ΈκΉŒ? 이 μ˜μƒλ§Œ λ„€ λ‹€μ„― λ²ˆμ€ λ³Έ 것 κ°™λ‹€. 컨셉은: "수의 합을 반볡적으둜 κ΅¬ν•˜λŠ”λ°, 합이 음수면 0으둜 μ΄ˆκΈ°ν™”ν•˜κ³  λ‹€μŒ μˆ˜λΆ€ν„° λ‹€μ‹œ μ‹œμž‘ν•œλ‹€." 합이 음수일 λ•Œ 0으둜 μ΄ˆκΈ°ν™”ν•˜λŠ” 것은, 전체 λ°°μ—΄ 쀑 μ–‘μˆ˜ μ΅œμ†Œ ν•˜λ‚˜ 이상 μžˆλ‹€κ³  κ°€μ •ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ–‘μˆ˜κ°€ μ΅œμ†Œ ν•˜λ‚˜ 이상 μžˆλ‹€λ©΄ κ·Έ μ–‘μˆ˜ ν•˜λ‚˜λ§Œ κ°€μ§€λŠ” 게 (음수 합보닀) 이득이닀. κ·Έλž˜μ„œ 또 이 μ•Œκ³ λ¦¬μ¦˜μ— λΉˆν‹ˆμ΄ μƒκΈ°λŠ”λ°, λ°°μ—΄μ˜ λͺ¨λ“  μˆ˜κ°€ 음수인 κ²½μš°μ— 0을 λ°˜ν™˜ν•˜κ²Œ λœλ‹€λŠ” 것이닀. κ·Έλž˜μ„œ 이 κ²½μš°λŠ” 배열에 μžˆλŠ” 수 쀑 κ°€μž₯ 큰 (음)수λ₯Ό λ°˜ν™˜ν•œλ‹€. λ¬Όλ‘  0을 λ°˜ν™˜ν•  λ•Œ 항상 λ°°μ—΄μ˜ λͺ¨λ“  μˆ˜κ°€ 음수인 것은 μ•„λ‹ˆλ‹€. λ°°μ—΄μ˜ λͺ¨λ“  μˆ˜κ°€ 0일 λ•Œ, ν˜Ήμ€ 0κ³Ό 음수둜만 이루어진 κ²½μš°μ—λ„ 0을 .. 2020. 6. 23.