✔ 문제 설명
선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[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는 각각 선분의 양 끝점 입니다.
💬 내 풀이
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 i=0; i<200; i++){
if(arr[i] >1){
answer++;
}
}
return answer;
}
}
- 배열을 활용하여 문제를 푼다.
(배열을 만들어 좌표에 따라 걸쳐진 부분 표기)
좌표 값 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|
arr | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 하지만 좌표의 값이 음수일 수 있는데, 음수 번째 배열로 접근할 수 없다.
→ 100씩 더해주어 표기
좌표 값 | 0 | ... | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | ... | 200 |
---|
arr | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 예를 들어 [[0, 1], [2, 5], [3, 9]] 세 선분이 있을 때, 배열에 표기해보았다.
좌표 값 | 0 | ... | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | ... | 200 |
---|
arr (선분[0,1]) | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
arr (선분[2,5]) | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
arr (선분[3,9]) | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
arr (최종) | 0 | 0 | 1 | 0 | 1 | 2 | 2 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
- 겹친 부분은 2 이상일 경우를 카운트 해주면 된다.
참고
https://youtu.be/aLYKp3OTh2Q