728x90
https://www.acmicpc.net/problem/4307
알고리즘 설명
문제 설명
개미들이 만나면 방향을 바꾸지만, 만났을 경우 서로 지나쳐간다라고 생각해도 논리가 같다.
라는 생각을 해내면 굉장히 쉬워지는 문제
코드 설명
개미의 현재 위치로부터 막대 양 끝으로 가는 시간을 구해서 최소시간, 최대시간을 구한다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static int tc; // 테스트 케이스 수
public static int n; // 개미의 수
public static int l; // 막대의 길이
public static int[] arr; // 각 개미의 초기 위치를 저장하는 배열
public static BufferedReader br;
public static StringTokenizer st;
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in)); // 표준 입력으로부터 입력을 받음
st = new StringTokenizer(br.readLine()); // 첫 번째 줄에서 테스트 케이스 수를 읽음
int tc = Integer.parseInt(st.nextToken());
for (int t = 0; t < tc; t++) {
st = new StringTokenizer(br.readLine());
l = Integer.parseInt(st.nextToken()); // 막대의 길이
n = Integer.parseInt(st.nextToken()); // 개미의 수
arr = new int[n]; // 개미의 초기 위치를 저장할 배열
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine()); // 각 개미의 초기 위치
arr[i] = Integer.parseInt(st.nextToken()); // 개미의 위치
}
sol(n, l, arr);
}
}
public static void sol(int n, int l, int[] arr) {
int minTime = 0; // 개미들이 가장 빨리 떨어지는 시간
int maxTime = 0; // 개미들이 가장 늦게 떨어지는 시간
for (int i = 0; i < n; i++) {
// 각 개미가 양 끝으로 떨어지는 시간 중에서 최소 시간과 최대 시간을 계산
int minTmpTime = Math.min(arr[i], l - arr[i]); // 왼쪽 끝이나 오른쪽 끝으로 가는 최소 시간
int maxTmpTime = Math.max(arr[i], l - arr[i]); // 왼쪽 끝이나 오른쪽 끝으로 가는 최대 시간
minTime = Math.max(minTmpTime, minTime); // 전체 개미 중에서 가장 빠른 시간 갱신
maxTime = Math.max(maxTmpTime, maxTime); // 전체 개미 중에서 가장 늦은 시간 갱신
}
System.out.println(minTime + " " + maxTime);
}
}
반응형
'백준 문제풀이 코드저장소 > Silver' 카테고리의 다른 글
Baekjoon 2503. 숫자 야구 / Python, Java (0) | 2024.07.12 |
---|---|
Baekjoon 11478. 서로 다른 문자열의 개수 / Java (0) | 2024.07.03 |
Baekjoon 16951. 블록 놀이 / Java (0) | 2024.07.03 |
Baekjoon 21966. (중략) / Java (0) | 2024.07.03 |