Java

[백준 1107] 리모컨 (JAVA)

iheeeee6-6 2023. 3. 29. 10:47
728x90

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

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net

 

다른 방식으로 접근했다가 많이 헤맸다...

완전탐색으로 풀어야하는 문제였다..

최대 N이 500,000임으로 6글자의 가장 큰 수인 999,999까지 포문을 돌려서 해당 숫자일 경우의 이동 수를 세어준다!

고장난 버튼의 숫자가 있을 경우에는 그냥 다음 숫자로 넘겨버린다!!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
	static int now = 100;
	static int result = Integer.MAX_VALUE;
	static PriorityQueue<Character> pq;
	static int n;
	static int m;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		m = Integer.parseInt(br.readLine());
		pq = new PriorityQueue<>();
		if (m > 0) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			for (int i = 0; i < m; i++) {
				pq.add(st.nextToken().charAt(0));
			}
		}

		int d = n - now;
		int count=0;
		for(int i=0;i<999999;i++) {
			String str = String.valueOf(i);
			boolean check=false;
			for(int j=0;j<str.length();j++) {
				if(pq.contains(str.charAt(j))) {
					check=true; break;
				}
			}
			
			if(check) continue;
			count=str.length()+Math.abs(n-i);
			result= Math.min(result, count);
			
		}

		System.out.println(Math.min(Math.abs(d), result));

	}

}

'Java' 카테고리의 다른 글

[백준 16235] 나무 재테크 (JAVA)  (0) 2023.04.05
[백준 9466] 텀 프로젝트 (JAVA)  (0) 2023.04.03
[백준 7569] 토마토 (JAVA)  (0) 2023.03.28
[백준 2636] 치즈 (JAVA)  (0) 2023.03.28
[백준 1826] 연료 채우기 (JAVA)  (0) 2023.03.28