코딩테스트/Programmers_LV0

Programmers_JAVA_겹치는 선분의 길이

wn1331 2022. 11. 25. 19:48
반응형

문제 설명

빨간색, 초록색, 파란색 선분이 x축 위에 있습니다. 세 선분의 x좌표 시작과 끝이 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를return 하도록 solution 함수를 완성해보세요.

lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.

선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 2만큼 겹쳐있습니다.


제한사항
  • lines의 길이 = 3
  • lines의 원소의 길이 = 2
  • 모든 선분은 길이가 1 이상입니다.
  • lines의 원소는 [a, b] 형태이며, a, b는 각각 양 끝점 중 하나입니다.
    • -100 ≤ a < b ≤ 100

 

첫 번째로, 배열의 최대값과 최소값을 찾고 배열에 저장한다.

그 다음 for 문으로 최소값부터 최대값까지의 범위로 Arr 클래스 리스트인 ArrayList에 요소를 넣어준 후 처음 입력받은 매개변수인 lines의 길이만큼 for문을 순회한다. 이중 포문으로 j의 값을 순회하되, 클래스를 하나 더 생성해서 첫 번째 값과 두 번째 값을(범위) 가진 객체 리스트를 참조해서 ArrayList만큼 for문을 다시 돌려서 ArrayList의 요소와 같으면 count를 추가해주는 방식이다.

3중 for문을 사용한 문제였다. 

import java.util.ArrayList;
class Solution {
    public int solution(int[][] lines) {
        int answer = 0;
        int min = lines[0][0], max = lines[0][0];
        for(int i = 0; i<lines.length;i++) for (int j = 0; j<2;j++){
                if(min>lines[i][j])min=lines[i][j];
                if(max<lines[i][j])max=lines[i][j];
            }
        ArrayList<Arr> arr = new ArrayList<>();
        for(int i = 0;i<max-min+1;i++) if(arr.size()!=max-min)arr.add(new Arr(min+i,min+i+1));
        
        for(int i = 0; i<lines.length;i++){
            for(int j = lines[i][0]; j<lines[i][1];j++){
                for(int cnt = 0;cnt<arr.size();cnt++){
                    if(arr.get(cnt).first_number==j){
                        arr.get(cnt).count+=1;
                    }
                }
            }
        }
        
        for(Arr ar : arr)if(ar.count>=2)answer++;
        
        return answer;
    }
        static class Arr{
        int first_number;
        int second_number;
        int count;

        Arr(int first_number,int second_number){
            this.first_number = first_number;
            this.second_number = second_number;
            this.count = 0;
        }
    
    }
}

 

 

인텔리제이 풀이

반응형