3<= N <= 3인 N에 대해서 1번부터 N번까지의 위치가 주어질 때, 첫번째와 N번째를 제외한 한 위치를 가지 않고 순서대로 이동할 때 총 이동거리의 합의 최소를 구하는 문제이다.
N이 충분히 작으므로 List 혹은 Array를 이용하여 1부터 N-1까지 순회하면서 해당 위치를 제외하고 이동하면서 거리를 더한 총 이동거리의 최솟값을 구하면 된다.
for(int i=2; i<n; i++) {
int sum = 0;
for(int j=1; j<n; j++) {
if(j+1==i) {
sum += Math.abs(board[j] - board[j+2]);
j++;
} else {
sum += Math.abs(board[j] - board[j+1]);
}
}
min = Math.min(min, sum);
}
결과 코드는 다음과 같다.
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 test_case=1; test_case<=T; test_case++) {
int n = Integer.parseInt(br.readLine());
int[] board = new int[n+1];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=1; i<=n; i++) board[i] = Integer.parseInt(st.nextToken());
int min = 0;
for(int i=1; i<n; i++) min += Math.abs(board[i] - board[i+1]);
for(int i=2; i<n; i++) {
int sum = 0;
for(int j=1; j<n; j++) {
if(j+1==i) {
sum += Math.abs(board[j] - board[j+2]);
j++;
} else {
sum += Math.abs(board[j] - board[j+1]);
}
}
min = Math.min(min, sum);
}
System.out.println(min);
}
}
}'알고리즘(백준 등) 공부' 카테고리의 다른 글
| 백준 1384번: 메시지 (0) | 2026.04.16 |
|---|---|
| SWEA 24396. 공과 상자 (0) | 2026.04.15 |
| SWEA 24696. 직육면체 자르기 (0) | 2026.04.13 |
| SWEA 25330. 거리 문자열 (0) | 2026.04.12 |
| SWEA 25695. 세 정수 (0) | 2026.04.09 |