Algorithm/기타

BOJ#4307 개미

밤이2209 2017. 5. 23. 20:33

BOJ#4307 개미


* 문제


* 풀이


쉬운 문제입니다.
(개미의 속도가 모두 같기 때문에)

저는 막대의 중간에서 가장 가까운점, 가장 멀리 있는 점을 구해서 최대/최소 시간을 구했습니다.



* 나의 코드


import java.io.*;
import java.util.StringTokenizer;

/**
* BOJ#4307 개미
* https://www.acmicpc.net/problem/4307
*/

public class Main {

public static void main(String[] args) throws IOException {

int l; // 막대의 길이
int n; // 개미의 수
int maxTime, minTime;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

int T = Integer.parseInt(br.readLine());

while (T-- > 0) {

maxTime = 0;
minTime = Integer.MAX_VALUE;

StringTokenizer st = new StringTokenizer(br.readLine());

l = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());

int half = l / 2;
int innerPos = l;
int outerPos = half;

for (int i = 0; i < n; i++) {

int pos = Integer.parseInt(br.readLine());

innerPos = Math.abs(half - innerPos) > Math.abs(half - pos) ? pos : innerPos;
outerPos = Math.abs(half - outerPos) < Math.abs(half - pos) ? pos : outerPos;
}

minTime = Math.min(minTime, Math.abs(0 - innerPos));
minTime = Math.min(minTime, Math.abs(l - innerPos));

maxTime = Math.max(maxTime, Math.abs(0 - outerPos));
maxTime = Math.max(maxTime, Math.abs(l - outerPos));

bw.write(minTime + " " + maxTime + "\n");
} // ~ test case loop

bw.flush();

bw.close();
br.close();
}

}


'Algorithm > 기타' 카테고리의 다른 글

알고리즘 공부 리스트 및 순서 (Algorithm Problem Solving Roadmap)  (6) 2017.06.04
세그먼트 트리(Segment Tree, 구간 트리)  (0) 2017.05.25
BOJ#11721  (0) 2017.05.19
BOJ#8393  (0) 2017.05.19
BOJ#1000  (0) 2017.05.19