본문 바로가기

알고리즘(백준 등) 공부

SWEA 24524. 레벨업

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