[알고리즘문제풀기] 겹치는 선분의 길이

silver's avatar
Feb 11, 2025
[알고리즘문제풀기] 겹치는 선분의 길이

문제

정답

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

silver