Problem Solving/BOJ & Programmers

[BOJ] 3135번: λΌλ””μ˜€

geum 2024. 9. 24. 17:58

✏️ 문제

μ€€ν•˜λŠ” λΌλ””μ˜€ μˆ˜μ§‘κ΄‘μœΌλ‘œ μ‹ μ œν’ˆμ˜ λΌλ””μ˜€κ°€ λ‚˜μ˜¬λ•Œλ§ˆλ‹€ ν₯뢄을 금치 λͺ»ν•œλ‹€κ³  ν•œλ‹€. 졜근 μ€€ν•˜κ°€ κ΅¬μž…ν•œ λΌλ””μ˜€λŠ” 맀우 ν•˜μ΄ν…Œν¬ ν•œλ°, κ·Έ λΌλ””μ˜€μ—λŠ” λ‹€μŒκ³Ό 같은 λ²„νŠΌμ΄ μžˆλ‹€.

 

  • 첫 번째 λ²„νŠΌμ€ 주파수λ₯Ό 1MHz μ¦κ°€μ‹œν‚¨λ‹€.
  • 두 번째 λ²„νŠΌμ€ 주파수λ₯Ό 1MHz κ°μ†Œμ‹œν‚¨λ‹€.
  • λ‚˜λ¨Έμ§€ N개의 λ²„νŠΌμ€ 즐겨찾기 κΈ°λŠ₯으둜, 미리 μ§€μ •λœ 주파수둜 μ΄λ™ν•œλ‹€.

 

μ€€ν•˜λŠ” λͺΈμ΄ μ•ˆμ’‹μ•„ ν•˜λ£¨μ— 손가락을 λͺ‡ 번 움직이지 λͺ»ν•˜κΈ° λ•Œλ¬Έμ— 우리의 도움이 ν•„μš”ν•˜λ‹€. ν˜„μž¬ μ£ΌνŒŒμˆ˜ A와 듣고싢은 주파수 Bκ°€ μ£Όμ–΄μ§ˆ λ•Œ, μ£ΌνŒŒμˆ˜ Aμ—μ„œ B둜 갈 λ•Œ λˆŒλŸ¬μ•Ό ν•˜λŠ” κ°€μž₯ 적은 λ²„νŠΌμˆ˜λ₯Ό κ΅¬ν•΄μ£Όμž.

 

πŸ€– μž…μΆœλ ₯ μ˜ˆμ‹œ

 

🧐 λ‚œμ΄λ„/μ†Œμš” μ‹œκ°„

  • λ‚œμ΄λ„: solved.ac κΈ°μ€€ S5
  • μ†Œμš” μ‹œκ°„: 45λΆ„ κ³ λ―Ό ν›„ 챗지피티 도움 λ°›μŒ..^^

 

πŸ’‘ 풀이

핡심 μ•„μ΄λ””μ–΄λŠ” '1μ”© μ›€μ§μ—¬μ„œ B둜 κ°€λŠ” κ²½μš°μ™€ 즐겨찾기 λ²„νŠΌμ„ μ΄μš©ν•˜λŠ” 경우의 μ΅œμ†Ÿκ°’ 비ꡐ'이닀. 이 아이디어λ₯Ό λ– μ˜¬λ¦¬λŠ” 건 어렡지 μ•Šμ•˜λŠ”λ° 또 κ΅¬ν˜„μ—μ„œ λ§‰ν˜€λ²„λ €μ„œ μ±—μ„ μƒλ‹˜μ˜ 도움을 λ°›μ•˜λ‹€.

 

μ½”λ“œ λ³΅μž‘ν•˜κ²Œ μ§œλŠ” 이 κ³ μ§ˆλ³‘μ€ λŒ€μ²΄ μ–Έμ œ 낫지?

 

1) 둜직

1. 첫 번째 λ²„νŠΌ, 두 번째 λ²„νŠΌλ§Œμ„ μ΄μš©ν•΄μ„œ λͺ©ν‘œ 주파수 B둜 κ°€λŠ” 경우 계산 → abs(A-B)

2. 즐겨찾기 λ²„νŠΌμœΌλ‘œ νŠΉμ • 주파수λ₯Ό 맞좘 λ’€ λͺ©ν‘œ 주파수 B둜 κ°€λŠ” 경우 계산 → abs(즐겨찾기 주파수-B)+1

3. 1, 2 κ³Όμ •μ˜ κ²°κ³Όκ°’ 쀑 min 값이 μ •λ‹΅

 

이 λ•Œ κ³Όμ • 2μ—μ„œ "+1"μ΄λž€, ν˜„μž¬ λ²„νŠΌμ—μ„œ 즐겨찾기 λ¦¬μŠ€νŠΈμ— μžˆλŠ” λ²„νŠΌμœΌλ‘œ κ°€κΈ° μœ„ν•΄ λˆ„λ₯΄λŠ” 경우λ₯Ό μ˜λ―Έν•œλ‹€.

 

2) κ΅¬ν˜„

A, B = map(int, input().split())

N = int(input())

bookmark = []

for _ in range(N):
    bookmark.append(int(input()))

def press_button(current, target):
    min_presses = abs(current-target)
    
    for item in bookmark:
        presses = 1+abs(item-target)
        
        min_presses = min(min_presses, presses)
    
    return min_presses

print(press_button(A, B))