문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PjMgaALgDFAUq&categoryId=AV5PjMgaALgDFAUq&categoryType=CODE&problemTitle=1940&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1&&&&&&&&&
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(reader.readLine());
for (int i = 0; i < T; i++) {
int N = Integer.parseInt(reader.readLine());
int speed = 0;
int distance = 0;
for (int j = 0; j < N; j++) {
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
switch (Integer.parseInt(tokenizer.nextToken())) {
case 1:
speed += Integer.parseInt(tokenizer.nextToken());
distance += speed;
break;
case 2:
speed = Math.max(0, speed - Integer.parseInt(tokenizer.nextToken()));
distance += speed;
break;
case 0:
distance += speed;
break;
}
}
sb.append("#").append(i + 1).append(" ");
sb.append(distance).append("\n");
}
System.out.println(sb);
}
}
- 처음에 문제 이해가 잘 되지 않아 쓸데없이 둘러온 문제이다.
- 문제 자체는 간단하다. 가속되는 경우 그만큼 속도를 증가시키면 되고, 감속이면 그만큼 속도를 감속시키면 된다. 모든 명령이 1초 단위로 들어오므로 각 명령마다 이동 거리가 속도와 같다. 속도를 구해서 이를 더해주면 된다.