728x90
https://www.acmicpc.net/problem/19951
19951번: 태상이의 훈련소 생활
2020년 5월 14일 논산훈련소에 입대한 태상이는 첫 총기 훈련에서 가스 조절기를 잃어버리는 중대한 실수를 범했다. 그로 인해, 태상이는 조교들에게 눈총을 받게 되었다. 조교들은 태상이에게 연
www.acmicpc.net
728x90
메모리: 79,104 KB , 시간: 1,172 ms
사용 알고리즘: 투 포인터
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// N := 연병장의 크기, M := 조교의 수
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
// 연병장 높이
int[] height = new int[N + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
height[i] = Integer.parseInt(st.nextToken());
}
// 시작 위치와 조절 높이
ArrayList<int[]> start = new ArrayList<>();
// 끝 위치와 조절 높이
ArrayList<int[]> end = new ArrayList<>();
int s, e, h;
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
s = Integer.parseInt(st.nextToken());
e = Integer.parseInt(st.nextToken());
h = Integer.parseInt(st.nextToken());
start.add(new int[] {s, h});
end.add(new int[] {e, h});
}
// 명령 시작, 끝 리스트 위치 순으로 정렬
Collections.sort(start, (o1, o2) -> o1[0] - o2[0]);
Collections.sort(end, (o1, o2) -> o1[0] - o2[0]);
// 1~N까지 한 칸 씩 이동하며 명령이 새로 시작되면 명령 조절 높이 반영, 명령이 끝나면 조절 높이 빼주기
int sIdx = 0, eIdx = 0, k = 0;
for (int i = 1; i <= N; i++) {
while(sIdx < M && start.get(sIdx)[0] == i) k += start.get(sIdx++)[1]; // 시작해줘야 할 명령이 있다면 반영
height[i] += k;
while(eIdx < M && end.get(eIdx)[0] == i) k -= end.get(eIdx++)[1]; // 끝내야할 명령이 있다면 반영
}
// 출력
StringBuilder result = new StringBuilder();
for (int i = 1; i <= N; i++) {
result.append(height[i] + " ");
}
System.out.println(result);
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 18808] 스티커 붙이기 (java) (1) | 2024.01.11 |
---|---|
[백준, BOJ 10427] 빚 (java) (2) | 2024.01.10 |
[백준, BOJ 16398] 행성 연결 (java) (1) | 2024.01.05 |
[백준, BOJ 2412] 암벽 등반 (java) (0) | 2024.01.05 |
[백준, BOJ 13397] 구간 나누기 2 (java) (1) | 2024.01.05 |