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

코드설명

구현(Implementation)을 활용합니다.

 

각 숫자별로 우로 1씩, 좌로 1씩 움직이며 나눠진다면 해당 값으로 해당 주기에 맞추어서 처리될 수 있습니다. 

1씩 움직이게 하면서 가장 가까운값이 나눠진다면, 해당값이 답이겠지요.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
 
public class Main {
	static int N, M, S, P, A, B, X, L, R, C, n, k, m, l, K, D, T, H, W;
	static int answer = 0;
	static int[] arr = new int[1001];
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		T = Integer.parseInt(st.nextToken());
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
			answer += BFS(arr[i], T);
		}
		System.out.println(answer);
	}
	static int BFS(int s, int target) {
		int toLeft = s;
		int toRight = s;
		int cnt = 0;
		if(target % s == 0) {
			return cnt;
		}
		
		for(int i=0; ;i++) {
			toLeft += 1;
			toRight -= 1;
			cnt += 1;
			if(target % toLeft == 0) {
				return cnt;
			}
			if(target % toRight == 0) {
				return cnt;
			}
		}
	}
}

+ Recent posts