λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🐍 Algorithm/μ•Œκ³ λ¦¬μ¦˜-Swift

[μ•Œκ³ λ¦¬μ¦˜/Swift] μŠ€νƒ/큐 λ¬Έμ œν’€μ΄ - ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ κΈ°λŠ₯개발, ν”„λ¦°ν„°, 닀리λ₯Ό μ§€λ‚˜λŠ” 트럭

by Danna 2021. 6. 16.
728x90
728x90

Swift μŠ€ν„°λ”” 9μ£Όμ°¨ 6/15 .

μŠ€ν„°λ”” 3μ£Όμ°¨ μ±•ν„°μ˜€λ˜ "κ³ κΈ‰ 데이터 ꡬ쑰의 ν™œμš©" μ—μ„œ μŠ€νƒ, 큐, μˆœν™˜ 버퍼, μš°μ„ μˆœμœ„ 큐, μ—°κ²° λ¦¬μŠ€νŠΈμ— λŒ€ν•΄ ν•™μŠ΅ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. 이와 κ΄€λ ¨λ˜μ„œ μ•Œκ³ λ¦¬μ¦˜ 문제 풀이λ₯Ό μ§„ν–‰ν–ˆκ³ , ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ μŠ€νƒ/큐 챕터λ₯Ό ν’€μ—ˆμŠ΅λ‹ˆλ‹€. 

 

[Swift] μŠ€ν„°λ”” 3μ£Όμ°¨ - μŠ€μœ„ν”„νŠΈ 데이터 ꡬ쑰와 μ•Œκ³ λ¦¬μ¦˜

5/4 μ§„ν–‰ν–ˆλ˜ μŠ€μœ„ν”„νŠΈ 데이터 ꡬ쑰와 μ•Œκ³ λ¦¬μ¦˜ μ±…μ˜ 3μž₯ 'μŠ€μœ„ν”„νŠΈ κ³ κΈ‰ 데이터 ꡬ쑰의 ν™œμš©' μŠ€ν„°λ”” μ •λ¦¬μž…λ‹ˆλ‹€! πŸ‘€ 3μž₯ μš”μ•½ 3μž₯μ—μ„œλŠ” Swift κΈ°λ³Έ 데이터 ꡬ쑰 쀑 Collections (Array, Dictionary, Set)

jellysong.tistory.com


 

βœ”οΈŽ κΈ°λŠ₯개발

 

πŸ’‘ μ°Έκ³  사항

 

  • "뒀에 μžˆλŠ” κΈ°λŠ₯은 μ•žμ— μžˆλŠ” κΈ°λŠ₯이 배포될 λ•Œ ν•¨κ»˜ λ°°ν¬λœλ‹€." -> Queue 자료ꡬ쑰λ₯Ό λ– μ˜¬λ¦Ό
  • "μž‘μ—…μ˜ κ°œμˆ˜λŠ” 100개 μ΄ν•˜μ΄λ‹€." -> μ‹œκ°„λ³΅μž‘λ„μ— 큰 영ν–₯을 받지 μ•ŠλŠ”λ‹€.

 

πŸ‘€ 풀이 κ³Όμ •

 

  • progresses, speeds 배열을 Queue ν˜•νƒœλ‘œ μƒκ°ν•΄μ„œ, μž‘μ—…μ΄ λλ‚œ κ²½μš°μ—λŠ” pop 해주도둝 ν•œλ‹€. 
  • progresses 배열이 λΉ„μ–΄μžˆμ„ λ•Œ κΉŒμ§€ μ•„λž˜ μž‘μ—…μ„ λ°˜λ³΅ν•œλ‹€. (λͺ¨λ“  μž‘μ—…μ΄ λλ‚ λ•ŒκΉŒμ§€)
  • ν•˜λ£¨κ°€ 지날 λ•Œ λ§ˆλ‹€ μž‘μ—…μ˜ 진도λ₯Ό κ³„μ‚°ν•œλ‹€.
  • 배포가 κ°€λŠ₯ν•œ 경우 (progresses.first κ°€ max 인 경우), 배포할 수 μžˆλŠ” μž‘μ—…μ„ μΉ΄μš΄νŒ…ν•œλ‹€.

 

πŸ‘‡ μ½”λ“œ

 

  • Queue λ₯Ό 직접 κ΅¬ν˜„ν•˜μ§€ μ•Šκ³  μš”μ†Œ μΆ”κ°€μ‹œμ—λŠ” Array.append, μš”μ†Œ μ‚­μ œμ‹œμ—λŠ” Array.removeFirst λ©”μ„œλ“œλ₯Ό μ΄μš©ν–ˆλ‹€.
  • removeFirst λ©”μ„œλ“œλŠ” μ‹œκ°„λ³΅μž‘λ„κ°€ O(n) μ΄λ―€λ‘œ, μž…λ ₯ 데이터가 컀질 κ²½μš°μ—λŠ” μ‹ κ²½μ“°μž.
  • progresses λ°°μ—΄μ—μ„œ 첫번째 μš”μ†Œλ₯Ό κ°€μ Έμ˜¬ λ•Œμ—λŠ” Array.first ν”„λ‘œνΌν‹°λ₯Ό μ΄μš©ν–ˆλ‹€. 
  • first ν”„λ‘œνΌν‹°λŠ” Optional 값을 λ¦¬ν„΄ν•˜λ―€λ‘œ, nil 처리λ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€λŠ” 점을 μ‹ κ²½μ“°μž.

 

 

songda515/SwiftAlgorithm

Swift 둜 ν‘ΈλŠ” μ•Œκ³ λ¦¬μ¦˜. Contribute to songda515/SwiftAlgorithm development by creating an account on GitHub.

github.com

 


 

βœ”οΈŽ ν”„λ¦°ν„°

 

πŸ’‘ 풀이 κ³Όμ •

 

  • "일반적인 ν”„λ¦°ν„°λŠ” 인쇄 μš”μ²­μ΄ λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ 인쇄" -> FIFO ꡬ쑰, Queue λ₯Ό λ– μ˜¬λ¦΄ 수 있음
  • "μ€‘μš”λ„κ°€ 높은 λ¬Έμ„œλ₯Ό λ¨Όμ € 좜λ ₯ν•˜λ„λ‘ ν•œλ‹€." -> μž‘μ„±λœ μš”κ΅¬μ‚¬ν•­μ— 맞게 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜λ©΄ λœλ‹€.
  • "λ‚΄κ°€ 인쇄λ₯Ό μš”μ²­ν•œ λ¬Έμ„œκ°€ λͺ‡ 번째둜 μΈμ‡„λ˜λŠ”μ§€ μ•Œκ³  μ‹Άλ‹€" -> λ¬Έμ„œμ˜ μˆœμ„œκ°€ 변경될 λ•Œλ§ˆλ‹€ index 값을 λ³€κ²½ν•˜λ©΄ λœλ‹€.
  • (2) κ°€μž₯ μ•žμ— μžˆλŠ” λ¬Έμ„œ(J) κ°€ 맨 λ’€λ‘œ κ°€λŠ” 경우 -> λ‚΄κ°€ μš”μ²­ν•œ λ¬Έμ„œλΌλ©΄? location = priorities.count - 1 : location - 1
  • (3) κ°€μž₯ μ•žμ— μžˆλŠ” λ¬Έμ„œ(J) κ°€ 좜λ ₯λ˜λŠ” 경우 -> λ‚΄κ°€ μš”μ²­ν•œ λ¬Έμ„œλΌλ©΄? break , μ•„λ‹ˆλΌλ©΄? index -= 1 
1. 인쇄 λŒ€κΈ°λͺ©λ‘μ˜ κ°€μž₯ μ•žμ— μžˆλŠ” λ¬Έμ„œ(J)λ₯Ό λŒ€κΈ°λͺ©λ‘μ—μ„œ κΊΌλƒ…λ‹ˆλ‹€.
2. λ‚˜λ¨Έμ§€ 인쇄 λŒ€κΈ°λͺ©λ‘μ—μ„œ J보닀 μ€‘μš”λ„κ°€ 높은 λ¬Έμ„œκ°€ ν•œ κ°œλΌλ„ μ‘΄μž¬ν•˜λ©΄ Jλ₯Ό λŒ€κΈ°λͺ©λ‘μ˜ κ°€μž₯ λ§ˆμ§€λ§‰μ— λ„£μŠ΅λ‹ˆλ‹€.
3. 그렇지 μ•ŠμœΌλ©΄ Jλ₯Ό μΈμ‡„ν•©λ‹ˆλ‹€.

 

πŸ‘‡ μ½”λ“œ

 

songda515/SwiftAlgorithm

Swift 둜 ν‘ΈλŠ” μ•Œκ³ λ¦¬μ¦˜. Contribute to songda515/SwiftAlgorithm development by creating an account on GitHub.

github.com

 

 

βœ”οΈŽ 닀리λ₯Ό μ§€λ‚˜λŠ” 트럭

 

πŸ’‘ 풀이 κ³Όμ •

 

  • 닀리λ₯Ό κ±΄λ„ˆκ³  μžˆλŠ” νŠΈλŸ­μ˜ λ¬΄κ²Œμ™€ μœ„μΉ˜λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ ν (λ°°μ—΄) 을 각자 λ§Œλ“ λ‹€. -> bridgeQueue, truckTime
  • λŒ€κΈ° νŠΈλŸ­μ˜ μ²«λ²ˆμ§Έκ°€ 닀리에 올라갈 수 μžˆμ„ λ•Œ, λ¬΄κ²Œλ₯Ό λ”ν•˜κ³  bridgeQueue μ™€ truckTime μ— κ°’을 μΆ”κ°€ν•œλ‹€.
  • 닀리λ₯Ό κ±΄λ„ˆκ³  μžˆλŠ” 트럭의 μœ„μΉ˜λ₯Ό 계산해쀀닀. -> truckTime μ „λΆ€ 1μ”© 더함
  • 닀리λ₯Ό κ±΄λ„ˆλŠ” μ€‘인 μ²«λ²ˆμ§Έ νŠΈλŸ­μ΄ λ‹€λ¦¬λ₯Ό λ‹€ κ±΄λ„œμ„λ•Œ, λ¬΄κ²Œλ₯Ό λΉΌκ³  bridgeQueue μ™€ truckTime μ— κ°’을 μ œμ™Έν•œλ‹€. 

 

πŸ‘€ μ°Έκ³  사항

 

  • μ²˜μŒμ— μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œμ—λŠ” λ‹€λ¦¬μœ„μ˜ 트럭의 무게λ₯Ό 더할 λ•Œ, 맀번 λ°°μ—΄μ˜ 합을 κ³„μ‚°ν–ˆλ‹€.
  • λˆ„μ ν•©μ˜ κ°œλ…μ΄ λ– μ˜¬λΌμ„œ 트럭의 무게λ₯Ό 맀번 κ³„μ‚°ν•˜λŠ” 것이 μ•„λ‹Œ, μΆ”κ°€λ˜κ³  μ œμ™Έλ  λ•Œμ—λ§Œ κ³„μ‚°ν•˜λ„λ‘ ν–ˆλ‹€.
  • μ™Όμͺ½ κ²°κ³Ό (맀번 sum 을 계산) vs 였λ₯Έμͺ½ κ²°κ³Ό (λˆ„μ ν•©μ„ 이용) μ‹œ μ΅œλŒ€ 503 ms -> μ΅œλŒ€ 131 ms 둜 μ€„μ—ˆλ‹€.

맀번 sum 을 κ³„μ‚°ν•˜λŠ” 것은 λΉ„νš¨μœ¨μ μ΄λ‹€.

 

πŸ‘‡ μ½”λ“œ

 

songda515/SwiftAlgorithm

Swift 둜 ν‘ΈλŠ” μ•Œκ³ λ¦¬μ¦˜. Contribute to songda515/SwiftAlgorithm development by creating an account on GitHub.

github.com

 

728x90
728x90