문제
정답
import java.util.*;
class Solution {
public int solution(int[][] lines) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
for (int[] l : lines) {
for (int i = l[0]; i < l[1]; i++) {
if (!set1.add(i)) {
set2.add(i);
}
}
}
return set2.size();
}
}
다른 사람들의 정답
import java.util.*;
class Solution {
public int solution(int[][] lines) {
// 각 위치에서 몇 개의 선이 겹치는지를 저장할 맵 생성
Map<Integer, Integer> map = new HashMap<>();
// 주어진 각 선에 대해 반복
for (int[] line : lines) {
// 선의 시작점과 끝점을 정렬하여 from과 to에 저장
int from = Math.min(line[0], line[1]); // 선의 시작점
int to = Math.max(line[0], line[1]); // 선의 끝점
// from부터 to까지의 모든 정수 i에 대해
for (int i = from; i < to; i++) {
// 현재 위치 i에 선이 겹치는 개수를 1 증가시키기
map.merge(i, 1, Integer::sum); // 위치 i에 1을 더함
}
}
// 겹치는 선이 2개 이상인 위치의 개수를 세어 반환
return (int) map.values().stream()
.filter(i -> i > 1) // 2개 이상 겹치는 위치 필터링
.count(); // 개수 세기
}
}
class Solution {
public int solution(int[][] lines) {
int answer = 0; // 겹치는 부분의 길이를 세기 위한 변수
// -100부터 99까지의 각 위치(i)에 대해 반복
for (int i = -100; i < 100; i++) {
int line = 0; // 현재 위치에서 겹치는 선의 개수를 세기 위한 변수
// 첫 번째 선이 현재 위치(i)를 포함하는지 확인
if (lines[0][0] <= i && lines[0][1] > i) line++;
// 두 번째 선이 현재 위치(i)를 포함하는지 확인
if (lines[1][0] <= i && lines[1][1] > i) line++;
// 세 번째 선이 현재 위치(i)를 포함하는지 확인
if (lines[2][0] <= i && lines[2][1] > i) line++;
// 현재 위치(i)에 두 개 이상의 선이 겹친다면
if (line > 1) answer++; // 겹치는 부분의 개수 증가
}
return answer; // 최종적으로 겹치는 부분의 길이 반환
}
}
Share article