선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.
lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.
선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.
풀이
중복한 선분은 저장하지 않아 중복하는 map도 추가
처음엔 점으로 저장하였지만 점만 동일한 결과로 인해 선분 전체를 map에 저장
map에 1-2와 같은 식으로 저장되어있으며 이와 겹치는 경우 겹치는 선분 길이를 저장하며 또 이와 겹치는 경우를 대비 dul에 겹치는 선분을 따로 저장해둠
import java.util.*;
class Solution {
public int solution(int[][] lines) {
Map<String,Integer> map = new HashMap<>();
Map<String,Integer> dul = new HashMap<>(); // 이미 중복된 선분 저장
int answer = 0;
for(int i=0; i<lines.length; i++){
for(int b=lines[i][0]; b<lines[i][1];b++){
if(!map.containsKey(b+"-"+(b+1))){
map.put(b+"-"+(b+1), 1);
} else if(!dul.containsKey(b+"-"+(b+1))){ // 중복
dul.put(b+"-"+(b+1), 1);
answer++;
}
}
}
return answer;
}
}
'programmers' 카테고리의 다른 글
[JAVA] 이진수 더하기 - Integer.toBinaryString() (0) | 2024.06.27 |
---|---|
[JAVA] 평행 (0) | 2024.06.27 |
[JAVA] 배열 조각하기 - Arrays.copyOfRange() (0) | 2024.06.26 |
[JAVA] 접미사 배열 - 정렬 (0) | 2024.06.24 |
[JAVA] k의 개수 (0) | 2024.03.20 |