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