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 |