본문 바로가기

Coding Test

Leetcode 624 Maximum Distance in Arrays (C++)

https://leetcode.com/problems/maximum-distance-in-arrays/

 

class Solution {
public:
    int maxDistance(vector<vector<int>>& arrays) {
        

        int ans=0;
        int M=arrays[0].back();
        int m=arrays[0].front();
    

        for(int i=1;i<arrays.size();i++){
            
            ans=max(ans, max(abs(arrays[i].back()-m), abs(M-arrays[i].front())));
            m=min(m, arrays[i].front());
            M=max(M, arrays[i].back());

            
        }


        return ans;
    }
};

1. 문제

임의 개수의 정수 배열이 오름차순 정렬된 상태로 주어진다. 두 정수 a, b 사이의 거리를 abs(a, b)로 정의할 때, 서로 다른 배열의 두 정수의 최대 거리를 구하라.

2. 풀이

거리가 최대가 되려면 한 배열의 최댓값에서 다른 배열의 최솟값을 빼야 한다. 이를 이용하여 풀어보자.

        int ans=0;
        int M=arrays[0].back();
        int m=arrays[0].front();

우선 변수를 초기화해준다. M은 탐색 이전 배열까지의 최댓값, m은 탐색 이전 배열까지의 최솟값을 뜻한다.

        for(int i=1;i<arrays.size();i++){
            
            ans=max(ans, max(abs(arrays[i].back()-m), abs(M-arrays[i].front())));
            m=min(m, arrays[i].front());
            M=max(M, arrays[i].back());

            
        }

이후 각 배열에 대해 거리의 최댓값을 갱신해준다. 현재 배열에 대해 거리의 최댓값은 다음의 방법으로 구할 수 있다.

  • 이전 배열까지의 최댓값-현재 배열의 최솟값
  • 현재 배열의 최댓값-이전 배열까지의 최솟값

거리는 서로 다른 두 배열에서 구해야 하므로 거리를 먼저 갱신한 후 최댓값과 최솟값을 갱신해준다. 

연산이 끝나고 ans를 리턴하면 정답을 구할 수 있다.

'Coding Test' 카테고리의 다른 글

백준 14502 연구소 (C++)  (0) 2024.08.18
백준 2668 숫자고르기 (C++)  (0) 2024.08.17
백준 2696 중앙값 구하기 (C++)  (0) 2024.08.13
백준 1711 직각삼각형 (C++)  (0) 2024.08.11
백준 1107 리모컨 (C++)  (0) 2024.08.10