알고리즘

<백준> 1107번 자바 알고리즘

changha. 2021. 7. 28. 16:09
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class B1107 {
	static List<Integer> list = new ArrayList<>();
	
	private static int chk(int num) { // 해당 숫자가 list에 포함 되어있는지 ? 버림 : 숫자 길이 카운트 
		int length = 0;
		if(num ==0) return list.contains(num) ? 0 : 1;
		
		while(num > 0) {
			if(list.contains(num % 10)) return 0;
			
			length++;
			
			num /= 10;
		}
		return length;
	}
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int channel = scan.nextInt(), m = scan.nextInt();
		while(m-- > 0) {
			list.add(scan.nextInt());
		}
		int min = Math.abs(channel - 100); // +, - 버튼으로만 이동했을 때 
		for(int i = 0; i<= 1000000; i++) {
			int length = chk(i);
			if (length > 0) min = Math.min(min, Math.abs(channel - i) + length); // min 갱신 
			
		}
		System.out.println(min);
	}

}

 

1. 단순히 +, - 로만 N까지 이동하는 경우

2. N까지 가장 근접한 후 +, - 로 이동하는 경우 

 

+, - 는 어차피 Math.abs로 씌우면 신경 쓰지 않아도 된다 

 

https://geehye.github.io/baekjoon-1107/#

위 블로그에서 도움받아서 다행히 쉽게 이해하게 됐다