[Programmers] Lv0 겹치는 선분의 길이 Java

2023. 1. 26. 05:54CS/자료구조 & 알고리즘

728x90

문제 출처

[프로그래머스 코딩 테스트 연습]

https://school.programmers.co.kr/learn/courses/30/lessons/120876?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

  • lines의 최소 최대 범위 만큼 배열을 만들고 그 배열에 각각 기록을 하면 겹치는 부분을 쉽게 구할 수 있다.
  • 겹치는 부분은 2번 이상 기록된 거이므로 2번 이상 된것을 세면 된다.

 

소스 코드

import java.util.Arrays;

public class Solution {

    public int solution(int[][] lines) {

        int left = lines[0][0];
        int right = lines[0][1];
        for (int i = 1; i < lines.length; i++) {
            left = Math.min(left, lines[i][0]);
            right = Math.max(right, lines[i][1]);
        }

        int[] lineMap = new int[right - left + 1];

        for (int[] line : lines)
            for (int i = line[0]; i < line[1]; i++)
                lineMap[i - left]++;

        return (int) Arrays.stream(lineMap).filter(i -> i >= 2).count();
    }
}
728x90