class Solution {
public int solution(int[][] lines) {
int[] rail = new int[200];
for (int[] line : lines) {
for (int j = (line[0] + 100); j < (line[1] + 100); j++) {
rail[j]++;
}
}
int answer = 0;
for (int value : rail) {
if (value > 1) answer++;
}
return answer;
}
}
문제를 풀 때 주의해야할 점은 겹치는 '점'이 아닌 겹치는 선분
이다.
문제에서 주어진 예시로 {3, 5} 구간이 겹치게 되면 결과는 겹치는 점인 3이 아니라 겹치는 선분의 길이인 2이다.
선분의 시작점과 끝점의 범위는 -100 부터 100이다.
배열에서 음수의 인덱스 값을 표현할 수 없으므로 0 ~ 200범위의 배열을 만들어주고 입력받은 좌표에 100을 더해 배열에 선분을 그리도록 하였다.
입력받은 좌표가 {3, 5} 이면 103번, 104번 인덱스에 값이 들어가는 방식이다.
이렇게 입력받은 좌표를 전부 입력하게되면 배열 중 1보다 큰 수가 있는 것은 선분이 겹쳤다는 것을 알 수 있다.