공부하기/백준

[Java] 백준 풀기 3135 - 라디오

XEV 2024. 2. 19. 23:26

자바 백준 3135번

실버 5

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

 

3135번: 라디오

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 그리디 알고리즘

 

 

 

 

 

코드 풀이

import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int A = sc.nextInt();  // 현재 주파수 A
        int B = sc.nextInt();  // 듣고 싶은 주파수 B
        int N = sc.nextInt();  // 즐겨찾기 주파수의 개수
        
        // 즐겨찾기 주파수들을 저장하는 Set 생성
        Set<Integer> favorites = new HashSet<>();
        for (int i = 0; i < N; i++) {
            favorites.add(sc.nextInt());
        }
        
        // 최소 버튼 누르는 수 계산
        int minButtonPresses = calculateMinButtonPresses(A, B, favorites);
        
        // 결과 출력
        System.out.println(minButtonPresses);
    }
    
    // 주어진 A에서 B로 이동하는 데 필요한 최소 버튼 수 계산하는 메서드
    private static int calculateMinButtonPresses(int A, int B, Set<Integer> favorites) {
        int minButtonPresses = Math.abs(B - A);  // 기본적으로 증가 또는 감소 버튼만 누르는 경우
        
        // 즐겨찾기 주파수들을 순회하며 최소 버튼 누르는 수 갱신
        for (int favorite : favorites) {
            int pressesToFavorite = 1;  // 즐겨찾기 주파수로 이동하는 데 필요한 버튼 수
            pressesToFavorite += Math.abs(B - favorite);  // 즐겨찾기 주파수에서 목표 주파수로 이동하는 데 필요한 버튼 수
            minButtonPresses = Math.min(minButtonPresses, pressesToFavorite);  // 최소값 갱신
        }
        
        return minButtonPresses;
    }
}