본문 바로가기
🫧 코테 : CodingTest

[프로그래머스] Java : 겹치는 선분의 길이

by 예옹이 2024. 4. 11.

 

문제

선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.

 

입출력 예

lines result
[[0, 1], [2, 5], [3, 9]] 2
[[-1, 1], [1, 3], [3, 9]] 0
[[0, 5], [3, 9], [1, 10]] 8

 


 

 

lines에서 선분의 양 끝점이 -100부터 100까지 있다 했습니다.

그래서 임의로 길이가 200인 배열을 하나 만들어주고, 

그 배열 안에 lines의 원소들이 지나간 자리를 +1씩 찍어줍니다.

만약 두 선분이 겹쳐졌다면 원소값이 2 이상일겁니다.

 

 

1. 길이가 200인 배열 생성

int arr[] = new int[200];

 

 

2. 배열에 -100부터 100까지의 양 끝점이 찍히도록 for문 생성

for(int i=0; i<lines.length; i++){
	for(int j=lines[i][0]+100; j<lines[i][1]+100; j++){
		arr[j]++;
	}
}

 

 

3. 배열의 원소 값이 1 초과 = 겹친 부분임

for(int z=0; z<arr.length; z++){
	if(arr[z] > 1){
		answer++;
	}
}

 

 


 

 

코드

import java.util.*;

class Solution {
    public int solution(int[][] lines) {
        int answer = 0;
        int arr[] = new int[200];
        
        for(int i=0; i<lines.length; i++){
            for(int j=lines[i][0]+100; j<lines[i][1]+100; j++){
                arr[j]++;
            }
        }
        
        for(int z=0; z<arr.length; z++){
            if(arr[z] > 1){
                answer++;
            }
        }
        return answer;
    }
}

 

 

 

 

 

제가 작성한 코드는 아래에서 확인하실 수 있습니다.

https://github.com/eonwy/programmers

 

GitHub - eonwy/programmers: 🔎 coding-test (programmers) 🔍

🔎 coding-test (programmers) 🔍. Contribute to eonwy/programmers development by creating an account on GitHub.

github.com