[ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ ] μ˜ˆμƒ λŒ€μ§„ν‘œ

πŸ§‘πŸ»β€πŸ’» Coding Test/⌨️ Programmers ┃ 2024. 3. 28. 10:07
λͺ©μ°¨
  1. 문제 μ„€λͺ…
  2. 문제 풀이
  3. λ‚˜μ˜ 풀이
  4. λ‹€λ₯Έ μ‚¬λžŒ 풀이
  5. λŠλ‚€μ 

 

 

 

πŸ„ μ½”λ”©ν…ŒμŠ€νŠΈ

μ½”λ”©ν…ŒμŠ€νŠΈ 문제 풀이

✍🏻 Github

문제 풀이 github 링크

 

 

문제 μ„€λͺ…

β–³β–³ κ²Œμž„λŒ€νšŒκ°€ κ°œμ΅œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 λŒ€νšŒλŠ” Nλͺ…이 μ°Έκ°€ν•˜κ³ , ν† λ„ˆλ¨ΌνŠΈ ν˜•μ‹μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€. Nλͺ…μ˜ μ°Έκ°€μžλŠ” 각각 1λΆ€ν„° Nλ²ˆμ„ μ°¨λ‘€λŒ€λ‘œ λ°°μ •λ°›μŠ΅λ‹ˆλ‹€. 그리고, 1λ²ˆβ†”2번, 3λ²ˆβ†”4번, ... , N-1λ²ˆβ†”N번의 μ°Έκ°€μžλΌλ¦¬ κ²Œμž„μ„ μ§„ν–‰ν•©λ‹ˆλ‹€. 각 κ²Œμž„μ—μ„œ 이긴 μ‚¬λžŒμ€ λ‹€μŒ λΌμš΄λ“œμ— μ§„μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, λ‹€μŒ λΌμš΄λ“œμ— μ§„μΆœν•  μ°Έκ°€μžμ˜ λ²ˆν˜ΈλŠ” λ‹€μ‹œ 1λ²ˆλΆ€ν„° N/2λ²ˆμ„ μ°¨λ‘€λŒ€λ‘œ λ°°μ •λ°›μŠ΅λ‹ˆλ‹€. λ§Œμ•½ 1λ²ˆβ†”2번 끼리 κ²¨λ£¨λŠ” κ²Œμž„μ—μ„œ 2번이 μŠΉλ¦¬ν–ˆλ‹€λ©΄ λ‹€μŒ λΌμš΄λ“œμ—μ„œ 1λ²ˆμ„ λΆ€μ—¬λ°›κ³ , 3λ²ˆβ†”4λ²ˆμ—μ„œ κ²¨λ£¨λŠ” κ²Œμž„μ—μ„œ 3번이 μŠΉλ¦¬ν–ˆλ‹€λ©΄ λ‹€μŒ λΌμš΄λ“œμ—μ„œ 2λ²ˆμ„ λΆ€μ—¬λ°›κ²Œ λ©λ‹ˆλ‹€. κ²Œμž„μ€ μ΅œμ’… ν•œ λͺ…이 남을 λ•ŒκΉŒμ§€ μ§„ν–‰λ©λ‹ˆλ‹€.

μ΄λ•Œ, 처음 λΌμš΄λ“œμ—μ„œ Aλ²ˆμ„ κ°€μ§„ μ°Έκ°€μžλŠ” 경쟁자둜 μƒκ°ν•˜λŠ” B번 μ°Έκ°€μžμ™€ λͺ‡ 번째 λΌμš΄λ“œμ—μ„œ λ§Œλ‚˜λŠ”μ§€ κΆκΈˆν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. κ²Œμž„ μ°Έκ°€μž 수 N, μ°Έκ°€μž 번호 A, 경쟁자 번호 Bκ°€ ν•¨μˆ˜ solution의 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 처음 λΌμš΄λ“œμ—μ„œ Aλ²ˆμ„ κ°€μ§„ μ°Έκ°€μžλŠ” 경쟁자둜 μƒκ°ν•˜λŠ” B번 μ°Έκ°€μžμ™€ λͺ‡ 번째 λΌμš΄λ“œμ—μ„œ λ§Œλ‚˜λŠ”μ§€ return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”. λ‹¨, A번 μ°Έκ°€μžμ™€ B번 μ°Έκ°€μžλŠ” μ„œλ‘œ λΆ™κ²Œ 되기 μ „κΉŒμ§€ 항상 이긴닀고 κ°€μ •ν•©λ‹ˆλ‹€.

 

μ œν•œμ‚¬ν•­

  • N : 2 이상 2 μ΄ν•˜μΈ μžμ—°μˆ˜ (2의 μ§€μˆ˜ 승으둜 μ£Όμ–΄μ§€λ―€λ‘œ λΆ€μ „μŠΉμ€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)
  • A, B : N μ΄ν•˜μΈ μžμ—°μˆ˜ (단, A β‰  B μž…λ‹ˆλ‹€.)

 

μž…μΆœλ ₯ 예

N A B answer
8 4 7 3

 

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1

첫 번째 λΌμš΄λ“œμ—μ„œ 4번 μ°Έκ°€μžλŠ” 3번 μ°Έκ°€μžμ™€ λΆ™κ²Œ 되고, 7번 μ°Έκ°€μžλŠ” 8번 μ°Έκ°€μžμ™€ λΆ™κ²Œ λ©λ‹ˆλ‹€. 항상 이긴닀고 κ°€μ •ν–ˆμœΌλ―€λ‘œ 4번 μ°Έκ°€μžλŠ” λ‹€μŒ λΌμš΄λ“œμ—μ„œ 2번이 되고, 7번 μ°Έκ°€μžλŠ” 4번이 λ©λ‹ˆλ‹€. 두 번째 λΌμš΄λ“œμ—μ„œ 2λ²ˆμ€ 1번과 λΆ™κ²Œ 되고, 4λ²ˆμ€ 3번과 λΆ™κ²Œ λ©λ‹ˆλ‹€. 항상 이긴닀고 κ°€μ •ν–ˆμœΌλ―€λ‘œ 2λ²ˆμ€ λ‹€μŒ λΌμš΄λ“œμ—μ„œ 1번이 되고, 4λ²ˆμ€ 2번이 λ©λ‹ˆλ‹€. μ„Έ 번째 λΌμš΄λ“œμ—μ„œ 1번과 2번으둜 두 μ°Έκ°€μžκ°€ λΆ™κ²Œ λ˜λ―€λ‘œ 3을 return ν•˜λ©΄ λ©λ‹ˆλ‹€.

 

 

 

문제 풀이

λ‚˜μ˜ 풀이


      
import Foundation
func solution(_ n:Int, _ a:Int, _ b:Int) -> Int{
var answer = 1
var a = a, b = b, n = n
while n != 1 {
n /= 2
a = ( a + 1 ) / 2
b = ( b + 1 ) / 2
if a == b {
return answer
}else {
answer += 1
}
}
return answer
}

 

μ²˜μŒμ—λŠ” λ°‘μ—μ„œ μœ„λ‘œ μ˜¬λΌκ°€λ©΄μ„œ 비ꡐλ₯Ό ν•˜λŠ”κ²Œ μ•„λ‹Œ μœ„μ—μ„œ λ°‘μœΌλ‘œ λ‚΄λ €μ˜€λ©΄μ„œ 비ꡐλ₯Ό ν•˜λ €κ³  ν–ˆλ‹€.

λ§Œμ•½ N이 8이라면 1…4 / 5…8 μ΄λŸ°μ‹μœΌλ‘œ 비ꡐλ₯Όν•΄μ„œ λ‹€λ₯Έ 범주에 μžˆλ‹€λ©΄ 3을 좜λ ₯ν•˜κ³ ,

같은 범주에 μžˆλ‹€λ©΄ λ‹€μ‹œ λΉ„κ΅ν•œλ‹€. 1..2 / 3…4 μ΄λ ‡κ²Œ ν•΄μ„œ λ°˜λ³΅ν•˜μ—¬ κ²°κ΅­ 같은 범주라면 1을 좜λ ₯ν•˜λ„λ‘ ν–ˆλ‹€.

근데 같은 범주라면 1…4 인지 5…8 인지 κΉŒμ§€ νŒŒμ•…μ„ ν•΄μ•Όν•˜λ‹ˆ μ’€ 더 λ³΅μž‘ν–ˆλ˜ 것 κ°™λ‹€.

 

 

κ·Έλž˜μ„œ λ‹€μ‹œ λ¦¬ν”„λ ˆμ‰¬ν•˜κ³ μž 물을 λ¨Ήμ—ˆλŠ”λ°, κ·Έ μˆœκ°„ β€œ 2둜 λ‚˜λˆˆ λͺ«?!? 이면 λ˜κ² λ‹€" λΌλŠ” 생각이 번쩍 λ– μ˜¬λžλ‹€. 근데 λ¬Έμ œλŠ” 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 μ—μ„œ 2둜 λ‚˜λˆˆ λͺ«μ„ κ΅¬ν•˜λ©΄ 0 / 1 / 1 / 2 / 2 / 3 / 3 / 4 κ°€ λ˜λŠ” 것이닀. 12κ°€ 같은 범주에 λ“€κ²Œλ” λ§Œλ“€λ €μ„œ 1을 λ”ν•˜κ±°λ‚˜ λΉΌμ„œ 1 / 1 / 2 / 2 / 3 / 3 / 4 / 4 둜 λ§Œλ“€μ–΄μ•Ό ν–ˆλ‹€. λ‚˜λŠ” λ”ν•˜λŠ” μͺ½μ„ νƒν–ˆλ‹€.

 

 

A와 B에 각각 1을 λ”ν•œ ν›„ 2둜 λ‚˜λˆˆ 값을 λŒ€μž…ν•œλ‹€. 값이 κ°™μ§€ μ•Šλ‹€λ©΄ count λ₯Ό 1올리고 λ‹€μ‹œ 반볡 κ²°κ΅­ 값이 κ°™λ‹€λ©΄ countκ°€ 닡인 것이닀.

 

 

8번이면 3번만 λ°˜λ³΅ν•˜λ©΄ 되고, 2의 20번이면 20번만 λ°˜λ³΅ν•œλ‹€λ©΄ λ‚˜μ˜€λŠ” ν’€μ΄μ˜€λ‹€.

κ·Έλž˜μ„œ μ‹œκ°„λ„ 정말 효율적으둜 계산할 수 있고, 풀이도 κ°„λ‹¨ν•˜κ²Œ ν’€μ—ˆλ˜ 것 κ°™λ‹€.

 

 

 

λ‹€λ₯Έ μ‚¬λžŒ 풀이


      
import Foundation
func solution(_ n:Int, _ a:Int, _ b:Int) -> Int
{
var answer = 0
var nextA = a
var nextB = b
repeat {
nextA = (nextA + 1) / 2
nextB = (nextB + 1) / 2
answer += 1
} while nextA != nextB
return answer
}

λΆ„λͺ… λ‚˜λž‘ 같은 λ°©λ²•μœΌλ‘œ ν’€μ—ˆλŠ”λ° μ½”λ“œκ°€ μ–΄μ©œμ΄λ¦¬ κΉ”λ”ν•œμ§€..! μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ 쓰도둝 μ—°μŠ΅ν•΄μ•Όκ² λ‹€.

 

 

λŠλ‚€μ 

Lv.2 에 μ˜¬λΌμ˜€λ‹ˆ λ§Žμ€ ν…Œν¬λ‹‰μ„ μš”κ΅¬ν•˜λ©΄μ„œ 문제λ₯Ό ν’€μœΌλΌλŠ” 게 μ•„λ‹ˆλΌ β€˜ λ„ˆ.. 이거 머리 μž˜μ¨μ•Ό ν’€ 수 μžˆλŠ”λ° ν’€ 수 μžˆκ² μ–΄..?’ μ΄λ ‡κ²Œ λ¬»λŠ” λŠλ‚Œμ΄λ‹€. μ˜€λŠ˜λ„ 성곡적 μ•Œκ³ λ¦¬μ¦˜ 풀이..!!

 

 

 

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)
  1. 문제 μ„€λͺ…
  2. 문제 풀이
  3. λ‚˜μ˜ 풀이
  4. λ‹€λ₯Έ μ‚¬λžŒ 풀이
  5. λŠλ‚€μ 
'πŸ§‘πŸ»β€πŸ’» Coding Test/⌨️ Programmers' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ ] 멀리 λ›°κΈ° / 동적 κ³„νšλ²• ( Dynamic Programming )
  • [ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ ] N개의 μ΅œμ†Œκ³΅λ°°μˆ˜
  • [ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ ] 카펫
  • [ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ ] ν”Όλ³΄λ‚˜μΉ˜ 수
EarthSea
EarthSea
μ£Όλ‹ˆμ–΄ 개발자 μ§Έμž…λ‹ˆλ‹€ 🌱

λΈ”λ‘œκ·Έ 메뉴

  • κΈ€μ“°κΈ°
EarthSea
EarthSea's Log🌏
EarthSea

곡지사항

  • EarthSea's Introduce
  • λΆ„λ₯˜ 전체보기
    • ✏️ TIL
    • πŸ“‘ Project
    • πŸ“’ Study
      • 🌐 React
      • 🚩 Swift
      • πŸ“ UIKit
      • πŸ–€ Git
      • 🩡 Python
    • πŸ§‘πŸ»β€πŸ’» Coding Test
      • ⌨️ Programmers
      • πŸ–ŒοΈ BAEKJOON
    • πŸŽ† SSAFY
    • 🍎 Apple
    • 🏷️ Tistory
    • 였둯이 λ‚˜μ˜ μ‹œκ°„
Total
Today
Yesterday
hELLO Β· Designed By μ •μƒμš°.v4.2.2
EarthSea
[ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ ] μ˜ˆμƒ λŒ€μ§„ν‘œ
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.