파이썬 μ•Œκ³ λ¦¬μ¦˜ 37

[μ΄μ½”ν…Œ Ch13-15] νŠΉμ • 거리의 λ„μ‹œ μ°ΎκΈ° (BFS)

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch13-15] νŠΉμ • 거리의 λ„μ‹œ μ°ΎκΈ° (BFS) ✍️Idea Sketch μ‹œκ°„λ³΅μž‘λ„ κ·Έλž˜ν”„λ₯Ό μΈμ ‘λ¦¬μŠ€νŠΈλ‘œ κ΅¬ν˜„ν•œ 경우 O(V + E)이닀. BFSμ—μ„œ λͺ¨λ“  정점을 λ°©λ¬Έν•œλ‹€. ν•œ 번 λ°©λ¬Έν•œ 정점은 λ‹€μ‹œ λ°©λ¬Έν•˜μ§€ μ•ŠλŠ”λ‹€. (V = vertex = 정점) BFSμ—μ„œ ν•œ 정점을 λ°©λ¬Έν•  λ•Œλ§ˆλ‹€ κ°„μ„ μœΌλ‘œ μΈμ ‘ν•œ 정점을 λ°©λ¬Έν•œλ‹€. ν•œ 번 μ§€λ‚˜κ°„ 간선은 λ‹€μ‹œ μ§€λ‚˜κ°€μ§€ μ•ŠλŠ”λ‹€. (E = edge = κ°„μ„ ) λ”°λΌμ„œ κ·Έλž˜ν”„λ₯Ό μΈμ ‘λ¦¬μŠ€νŠΈλ‘œ κ΅¬ν˜„ν•œ 경우, μ‹œκ°„λ³΅μž‘λ„λŠ” O(V + E) 이닀. μ•Œκ³ λ¦¬μ¦˜ : BFS λ„μ‹œμ˜ μ΅œλ‹¨ 거리λ₯Ό ꡬ해야 ν•˜λŠ” λ¬Έμ œμ΄λ―€λ‘œ BFS μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€. βœοΈλ‚΄ μ†ŒμŠ€μ½”λ“œ graph μΈμ ‘λ¦¬μŠ€νŠΈλ₯Ό λ§Œλ“€κ³  bfs ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€. λ°°μ—΄ visitedλŠ” λ„μ‹œμ˜ μ΅œλ‹¨ 거리λ₯Ό μ €μž₯..

[μ΄μ½”ν…Œ Ch13-18] κ΄„ν˜Έ λ³€ν™˜ (μž¬κ·€)

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch13-18] κ΄„ν˜Έ λ³€ν™˜ (μž¬κ·€) ✍️Idea Sketch 문제 μš”μ•½ κ· ν˜•μž‘νžŒ κ΄„ν˜Έ λ¬Έμžμ—΄ : '(' 와 ')' 둜만 이루어진 λ¬Έμžμ—΄μ΄ μžˆμ„ 경우, '(' 의 κ°œμˆ˜μ™€ ')' 의 κ°œμˆ˜κ°€ 같은 경우 μ˜¬λ°”λ₯Έ κ΄„ν˜Έ λ¬Έμžμ—΄ : κ· ν˜•μž‘νžŒ κ΄„ν˜Έ λ¬Έμžμ—΄μ—μ„œ '('와 ')'의 κ΄„ν˜Έμ˜ 짝도 λͺ¨λ‘ λ§žλŠ” 경우 λͺ©ν‘œ : κ· ν˜•μž‘νžŒ κ΄„ν˜Έ λ¬Έμžμ—΄μ„ μ˜¬λ°”λ₯Έ κ΄„ν˜Έ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜κΈ° μž…λ ₯이 빈 λ¬Έμžμ—΄μΈ 경우, 빈 λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€. λ¬Έμžμ—΄ wλ₯Ό 두 "κ· ν˜•μž‘νžŒ κ΄„ν˜Έ λ¬Έμžμ—΄" u, v둜 λΆ„λ¦¬ν•©λ‹ˆλ‹€. 단, uλŠ” "κ· ν˜•μž‘νžŒ κ΄„ν˜Έ λ¬Έμžμ—΄"둜 더 이상 뢄리할 수 μ—†μ–΄μ•Ό ν•˜λ©°, vλŠ” 빈 λ¬Έμžμ—΄μ΄ 될 수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄ uκ°€ "μ˜¬λ°”λ₯Έ κ΄„ν˜Έ λ¬Έμžμ—΄" 이라면 λ¬Έμžμ—΄ v에 λŒ€ν•΄ 1단계뢀터 λ‹€μ‹œ μˆ˜ν–‰ν•©λ‹ˆλ‹€. 3-1. μˆ˜ν–‰ν•œ κ²°κ³Ό..

[μ΄μ½”ν…Œ Ch12-14] μ™Έλ²½ 점검 (κ΅¬ν˜„)

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch12-14] μ™Έλ²½ 점검 (κ΅¬ν˜„) ✍️Idea Sketch 문제 μš”μ•½ μ™Έλ²½μ˜ 길이 n, μ·¨μ•½ μ§€μ μ˜ μœ„μΉ˜κ°€ λ‹΄κΈ΄ λ°°μ—΄ weak, 각 μΉœκ΅¬κ°€ 1μ‹œκ°„ λ™μ•ˆ 이동할 수 μžˆλŠ” 거리가 λ‹΄κΈ΄ λ°°μ—΄ distκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ·¨μ•½ 지점을 μ κ²€ν•˜κΈ° μœ„ν•΄ 보내야 ν•˜λŠ” 친ꡬ 수의 μ΅œμ†Œκ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”. weak : λ°˜λ“œμ‹œ λ°©λ¬Έν•΄μ•Όν•˜λŠ” 지점 dist : ν•œλ²ˆμ— 이동할 수 μžˆλŠ” 거리 μ œν•œμ‚¬ν•­ n은 1 이상 200 μ΄ν•˜μΈ μžμ—°μˆ˜ weak의 κΈΈμ΄λŠ” 1 이상 15 μ΄ν•˜ weak의 μ›μ†ŒλŠ” 0 이상 n - 1 μ΄ν•˜μΈ μ •μˆ˜ dist의 κΈΈμ΄λŠ” 1 이상 8 μ΄ν•˜ dist의 μ›μ†ŒλŠ” 1 이상 100 μ΄ν•˜μΈ μžμ—°μˆ˜ weakλ₯Ό λͺ¨λ‘ λ°©λ¬Έν•  수 μ—†λŠ” 경우, return -..

[μ΄μ½”ν…Œ Ch12-13] μΉ˜ν‚¨ 배달 (κ΅¬ν˜„)

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch12-13] μΉ˜ν‚¨ 배달 (κ΅¬ν˜„) ✍️Idea Sketch 문제 μš”μ•½ μΉ˜ν‚¨κ±°λ¦¬ : 집과 κ°€μž₯ κ°€κΉŒμš΄ μΉ˜ν‚¨μ§‘κ³Όμ˜ 거리 λ„μ‹œμ˜ μΉ˜ν‚¨κ±°λ¦¬ : μΉ˜ν‚¨κ±°λ¦¬μ˜ ν•© μΉ˜ν‚¨μ§‘ m개만 남겨야 함 λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ μž‘μ€ 'λ„μ‹œμ˜ μΉ˜ν‚¨κ±°λ¦¬'λŠ”? μ‹œκ°„λ³΅μž‘λ„ μ°Έκ³ μ‚¬μ΄νŠΈ 이 λ¬Έμ œλŠ” n * n의 λͺ¨λ“  κ·Έλž˜ν”„ μ˜μ—­μ„ 탐색 ν•  ν•„μš”κ°€ μ—†λ‹€. 집과 μΉ˜ν‚¨μ§‘λ§Œ νƒμƒ‰ν•˜λ©΄ λœλ‹€. 집은 2N개, 즉 μ΅œλŒ€ 100개이며, μΉ˜ν‚¨μ§‘ M은 μ΅œλŒ€ 13이닀. μ΄λŠ” μ‹œκ°„ 초과λ₯Ό μ•”μ‹œν•˜λŠ” μ—°μ‚°νšŸμˆ˜ 1μ–΅κ³ΌλŠ” 거리가 λ©€λ‹€. λ”°λΌμ„œ 브루트포슀 μ•Œκ³ λ¦¬μ¦˜(μ™„μ „ 탐색)을 μ‹œλ„ν•΄λ΄„μ§ ν•˜λ‹€. 그리고 μΉ˜ν‚¨μ§‘ μ΅œλŒ€ 13개 μ€‘μ—μ„œ M개λ₯Ό κ³ λ₯΄λŠ” μ‘°ν•©μ˜ μ΅œλŒ€ 경우의 μˆ˜λŠ” 100,000에 가깝닀. (M이 쀑간값 6, 7일 경우 100,000에 가깝닀. ) μ•Œ..

[μ΄μ½”ν…Œ Ch12-10] μžλ¬Όμ‡ μ™€ μ—΄μ‡  (κ΅¬ν˜„)

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch12-10] μžλ¬Όμ‡ μ™€ μ—΄μ‡  (κ΅¬ν˜„) ✍️Idea Sketch 문제 μš”μ•½ μžλ¬Όμ‡ μ™€ νšŒμ „, 이동이 κ°€λŠ₯ν•œ μ—΄μ‡ κ°€ μžˆλ‹€. λͺ©ν‘œ : μžλ¬Όμ‡ μ˜ λͺ¨λ“  μ˜μ—­μ„ 1둜 μ±„μš°κΈ° = μžλ¬Όμ‡ μ˜ λͺ¨λ“  ν™ˆμ„ μ±„μš°κΈ° μ—΄μ‡  μ›€μ§μž„ μ’…λ₯˜ νšŒμ „ : μ‹œκ³„λ°©ν–₯ 90도 (90도 ν•¨μˆ˜ ν•˜λ‚˜ 만으둜 180도, 270도 λ™μž‘ κ°€λŠ₯) 이동 : μƒν•˜μ’Œμš° 1μΉΈ μ€‘μš” 아이디어 : μžλ¬Όμ‡  λ°°μ—΄ ν™•μž₯ μ‹œκ°„λ³΅μž‘λ„ O(n^4), O(n^2 * m^2) μžλ¬Όμ‡ μ™€ μ—΄μ‡ μ˜ μ΅œλŒ€ ν¬κΈ°λŠ” 20 * 20으둜, μ‹œκ°„ 초과λ₯Ό μ•”μ‹œν•˜λŠ” μ—°μ‚°νšŸμˆ˜ 1μ–΅κ³ΌλŠ” 거리가 λ©€λ‹€. λ”°λΌμ„œ 브루트포슀 μ•Œκ³ λ¦¬μ¦˜(μ™„μ „ 탐색)을 μ‹œλ„ν•΄λ΄„μ§ ν•˜λ‹€. 이 λ¬Έμ œλŠ” μžλ¬Όμ‡  배열을 3n * 3n으둜 ν™•μž₯ν•œ ν›„, κ°€λŠ₯ν•œ λͺ¨λ“  μ˜μ—­μ— λŒ€ν•΄ μ—΄μ‡  m * m 을 λŒ€μ‘°ν•΄λ΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ..

[μ΄μ½”ν…Œ Ch11-4] λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘ (그리디)

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch11-4] λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘ (그리디) 동넀 편의점의 주인인 λ™λΉˆμ΄λŠ” N개의 동전을 κ°–κ³  μžˆλ‹€. 이 λ•Œ N개의 동전을 μ΄μš©ν•΄ λ§Œλ“€ 수 μ—†λŠ” μ–‘μ˜ μ •μˆ˜ κΈˆμ•‘ 쀑 μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λΌ. 예λ₯Ό λ“€λ©΄, N = 5이고, 각 동전이 각각 3원, 2원, 1원, 1원, 9μ›μ§œλ¦¬ 동전이라고 κ°€μ •ν•˜μž. μ΄λ•Œ λ™λΉˆμ΄κ°€ λ§Œλ“€ 수 μ—†λŠ” μ–‘μ˜ μ •μˆ˜ κΈˆμ•‘ 쀑 μ΅œμ†Ÿκ°’μ€ 8원이닀. 또 λ‹€λ₯Έ μ˜ˆμ‹œλ‘œ, N = 3이고 각 동전이 각각 3원, 5원, 7원이면, λ§Œλ“€ 수 μ—†λŠ” μ–‘μ˜ μ •μˆ˜ κΈˆμ•‘ 쀑 μ΅œμ†Ÿκ°’μ€ 1원이닀. μž…λ ₯쑰건 첫째 μ€„μ—λŠ” λ™μ „μ˜ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ–‘μ˜ μ •μˆ˜ N이 주어진닀. (1

[μ΄μ½”ν…Œ Ch11-3] λ¬Έμžμ—΄ 뒀집기 (그리디)

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch11-3] λ¬Έμžμ—΄ 뒀집기 (그리디) λ‹€μ†œμ΄λŠ” 0κ³Ό 1둜만 이루어진 λ¬Έμžμ—΄ Sλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ†œμ΄λŠ” 이 λ¬Έμžμ—΄ S에 μžˆλŠ” λͺ¨λ“  숫자λ₯Ό μ „λΆ€ κ°™κ²Œ λ§Œλ“€λ €κ³  ν•©λ‹ˆλ‹€. λ‹€μ†œμ΄ ν•  수 μžˆλŠ” 행동은 Sμ—μ„œ μ—°μ†λœ ν•˜λ‚˜ μ΄μƒμ˜ 숫자λ₯Ό 작고 λͺ¨λ‘ λ’€μ§‘λŠ” κ²ƒμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ S = 0001100일 λ•ŒλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 전체λ₯Ό λ’€μ§‘μœΌλ©΄ 1110011이 λœλ‹€. 4번째 λ¬Έμžλ¬΄ν„° 5번째 λ¬ΈμžκΉŒμ§€ λ’€μ§‘μœΌλ©΄ 1111111이 λ˜μ–΄μ„œ λ‘λ²ˆλ§Œμ— λͺ¨λ‘ 같은 숫자둜 λ§Œλ“€ 수 μžˆλ‹€. ν•˜μ§€λ§Œ, μ²˜μŒλΆ€ν„° 4, 5번째 문자λ₯Ό λ’€μ§‘μ—ˆμœΌλ©΄ ν•œλ²ˆμ— 0000000이 λ˜μ–΄μ„œ 1λ²ˆλ§Œμ— λͺ¨λ‘ 같은 숫자둜 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄ Sκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λ‹€μ†œμ΄κ°€ ν•΄μ•Όν•˜λŠ” ν–‰λ™μ˜ μ΅œμ†Œ 횟수λ₯Ό 좜λ ₯ν•˜μ‹œμ˜€. μž…λ ₯쑰건 첫째 쀄에 ..

[μ΄μ½”ν…Œ Ch10-4] 컀리큘럼 (Graph)

πŸ‘©πŸ»‍πŸ’»λ¬Έμ œμ„€λͺ… [μ΄μ½”ν…Œ Ch10-4] 컀리큘럼 (Graph) λ™λΉˆμ΄λŠ” 온라인으둜 컴퓨터 곡학 κ°•μ˜λ₯Ό λ“£κ³  μžˆλ‹€. 이 λ•Œ 각 온라인 κ°•μ˜λŠ” μ„ μˆ˜ κ°•μ˜κ°€ μžˆμ„ 수 μžˆλŠ”λ°, μ„ μˆ˜ κ°•μ˜κ°€ μžˆλŠ” κ°•μ˜λŠ” μ„ μˆ˜ κ°•μ˜λ₯Ό λ¨Όμ € λ“€μ–΄μ•Όλ§Œ ν•΄λ‹Ή κ°•μ˜λ₯Ό 듀을 수 μžˆλ‹€. λ™λΉˆμ΄λŠ” 총 N개의 κ°•μ˜λ₯Ό λ“£κ³ μž ν•œλ‹€. κ°•μ˜λŠ” 1λ²ˆλΆ€ν„° Nλ²ˆκΉŒμ§€μ˜ 번호λ₯Ό 가진닀. λ˜ν•œ λ™μ‹œμ— μ—¬λŸ¬ 개의 κ°•μ˜λ₯Ό 듀을 수 μžˆλ‹€κ³  κ°€μ •ν•œλ‹€. 예λ₯Ό λ“€μ–΄, N = 3일 λ•Œ, 3번 κ°•μ˜μ˜ μ„ μˆ˜ κ°•μ˜λ‘œ 1번과 2번 κ°•μ˜κ°€ 이씨고, 1번과 2번 κ°•μ˜λŠ” μ„ μˆ˜ κ°•μ˜κ°€ μ—†λ‹€κ³  ν•˜μž. 그리고 각 κ°•μ˜μ— λŒ€ν•˜μ—¬ κ°•μ˜ μ‹œκ°„μ΄ λ‹€μŒκ³Ό κ°™λ‹€κ³  ν•˜μž. 1번 κ°•μ˜: 30μ‹œκ°„ 2번 κ°•μ˜: 20μ‹œκ°„ 3번 κ°•μ˜: 40μ‹œκ°„ 이 경우, 1번 κ°•μ˜λ₯Ό μˆ˜κ°•ν•˜κΈ°κΉŒμ§€μ˜ μ΅œμ†Œ μ‹œκ°„μ€ 30μ‹œκ°„, 2번 ..

[μ΄μ½”ν…Œ 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λ₯Ό 좜λ ₯..