6730. 장애물 경주 난이도 D3
[문제]
참가자들은 가장 처음 블록 위에서 가장 마지막 블록의 위로 이동해야 한다.
이 프로그램을 보고 있던 준홍이는 심심해서 이 장애물 경주가 얼마나 어려울지 난이도를 매겨 보기로 했다.
참가자가 이동하는 도중에 다음 블록의 높이가 현재 블록의 높이보다 높다면 올라가야 할 것이고,
다음 블록의 높이가 낮다면 내려가야 할 것이다.
준홍이의 생각에 이 둘은 서로 다른 능력을 필요로 하므로,
주어진 장애물에서 올라갈 때의 높이 변화와 내려갈 때의 높이 변화 둘 각각에 대해
가장 높이 변화가 심한 부분을 난이도라 하기로 했다.

예를 들어 위와 같이 장애물이 서 있다고 하자. 밑에 적힌 수가 직사각형 블록의 높이이다.
이 때, 올라갈 때 가장 심한 높이 변화는 60이고 내려갈 때 가장 심한 높이 변화는 40이다.
그러므로 이 장애물 경주의 난이도는 60, 40이다.
장애물들이 주어질 때, 준홍이의 기준으로 난이도가 어떻게 매겨지는지 구하는 프로그램을 작성하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 직사각형 블록의 개수를 나타내는 하나의 정수 N ( 2 ≤ N ≤ 100 )이 주어진다.
두 번째 줄에는 N개의 정수가 공백으로 구분되어 주어진다.
이는 직사각형 블록의 높이를 블록이 늘어선 순서대로 나타낸 것이다.
각 블록의 높이는 1이상 1,000이하이다.
[출력]
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고 한 칸을 띄운 후,
올라갈 때 가장 심한 높이 변화와 내려갈 때 가장 심한 높이 변화를 공백 하나로 구분하여 출력한다.
만약 올라가는 부분이나 내려가는 부분이 없다면, 0을 출력하면 된다.
| 5 5 10 70 30 50 90 2 30 100 2 100 20 3 40 40 40 7 12 345 678 901 23 45 6 |
//테스트 케이스 개수 //1st TC, N = 5 //N개의 블록 높이 //2nd TC |
| #1 60 40 #2 70 0 #3 0 80 #4 0 0 #5 333 878 |
//첫 번째 테스트 케이스 결과 |
[코드1](Math.max 사용 X)
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 {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i = 1; i <= T; i++) {
int N = Integer.parseInt(br.readLine());
int[] what = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
what[j] = Integer.parseInt(st.nextToken());
}
int up = 0;
int down = 0;
for (int j = 1; j < N; j++) {
if (what[j] > what[j - 1]) {
int up_tmp = what[j] - what[j - 1];
if (up_tmp > up) {
up = up_tmp;
}
} else if (what[j] < what[j - 1]) {
int down_tmp = what[j - 1] - what[j];
if (down_tmp > down) {
down = down_tmp;
}
}
}
System.out.println("#" + i + " " + up + " " + down);
}
br.close();
}
}
[코드2](Math.max 사용)
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 {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i = 1; i <= T; i++) {
int N = Integer.parseInt(br.readLine());
int[] what = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
// 블록 높이를 배열에 저장
for (int j = 0; j < N; j++) {
what[j] = Integer.parseInt(st.nextToken());
}
int up = 0;
int down = 0;
// 높이 변화 계산
for (int k = 1; k < N; k++) {
if (what[k] > what[k - 1]) {
int up_tmp = what[k] - what[k - 1];
up = Math.max(up, up_tmp);
} else if (what[k] < what[k - 1]) {
int down_tmp = what[k - 1] - what[k];
down = Math.max(down, down_tmp);
}
}
System.out.println("#" + i + " " + up + " " + down);
}
br.close();
}
}'SWEA(SWExpertacAdemy)' 카테고리의 다른 글
| [SWEA] 12221. 구구단2 (자바/JAVA) (0) | 2025.05.09 |
|---|---|
| [SWEA] 10505. 소득 불균형 (자바/JAVA) (0) | 2025.05.09 |
| [SWEA] 3431. 준환이의 운동관리 (자바/JAVA) (0) | 2025.05.09 |
| [SWEA] 13218. 조별과제 (자바/JAVA) (0) | 2025.05.09 |
| [SWEA] 12368. 24시간 [자바/JAVA] (0) | 2025.05.09 |