-
겹치는 선분의 길이코딩 테스트/Level 0 2022. 11. 8. 15:35반응형
https://school.programmers.co.kr/learn/courses/30/lessons/120876
파이썬
선분의 시작점을 +1, 끝점을 -1로 표현했다.
시작점과 끝점들을 graph 딕셔너리로 모았고
모든 선분의 최소점에서 최대점까지 for문으로 탐색하면서
겹치는 선분의 길이를 체크했다.def solution(lines): graph = {} min_graph, max_graph = float('inf'), float('-inf') for line in lines: graph.setdefault(line[0], 0) graph.setdefault(line[1], 0) min_line, max_line = min(line), max(line) min_graph, max_graph = min(min_graph, min_line), max(max_graph, max_line) graph[min_line] += 1 graph[max_line] -= 1 count = answer = 0 for i in range(min_graph, max_graph + 1): if t := graph.get(i): count += t if count > 1: answer += 1 return answer
코틀린
class Solution { fun solution(lines: Array<IntArray>): Int { val counter = sortedMapOf<Int, Int>() for (line in lines) { counter[line[0]] = (counter[line[0]] ?: 0) + 1 counter[line[1]] = (counter[line[1]] ?: 0) - 1 } var answer = 0 var total = 0 var start = -1 for ((key, value) in counter) { total += value if (total > 1 && start == -1) { start = key } else if (total < 2 && start != -1) { answer += key - start start = -1 } } return answer } }
약간 다른 방법으로...
반응형