본문 바로가기

알고리즘/백준 문제 풀이

[Python] 3135번 라디오

728x90

https://www.acmicpc.net/problem/3135

 

3135번: 라디오

첫 줄엔 정수 A와 B가 주어진다 (1 ≤ A, B < 1000, A ≠ B). 다음 줄엔 정수 N이 주어진다 (1 ≤ N ≤ 5). 다음 N개의 줄엔 미리 지정되어 있는 주파수가 주어진다 (주파수는 1000 보다 작다).

www.acmicpc.net


 

22/09/17

 

 

단순하게 생각하면 쉽게 풀리는 문제로, 티어를 끈다면 조금 당황할 수도 있을 문제라고 생각한다.


 

문제 접근 방식:

 

 

내가 왜 당황할 수도 있는 문제라고 이야기했냐면, 이 문제는 그리디적 사고를 해야 풀리는 문제이기 때문이다.

 

버튼을 누르는 방법은 3가지가 있다. 주파수를 하나 올리거나, 내리거나, 즐겨찾기가 돼있는 주파수로 이동하거나.

 

당연히 최대한 적게 버튼을 누르려면 즐겨찾기가 되있는 주파수를 많이 누르는 게 더 이득이다.

 

만약 즐겨찾기가 되있는 주파수가 현재 주파수와 차이가 난다면, 주파수가 하나 이상 차이가 나기 때문이다.

 

그래서 나는 내가 돌리고 싶어 하는 최종 주파수(B)에 제일 가까운 즐겨찾기 주파수로 간 뒤에 하나씩 올리거나 내리는 방식을 취했다.

 

한편, 처음 주파수(A)에서 최종 주파수(B)로 그냥 하나씩 올리거나 내리는 게 더 좋은 선택일 수 있으므로 (예를 들어, A = 1, B = 2, 즐겨찾기 주파수는 3), 둘 중 min값을 취해주도록 구현하였다.


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 3115번 라디오
# 구현
A, B = map(int, input().split())
N = int(input())
stared = [int(input()) for _ in range(N)]
min_value = min(abs(A - B), min(abs(i - B) for i in stared)+1)
print(min_value)