[ 다먹살 ]/- Coding

[프로그래머스] 레벨0 겹치는 선분의 길이

엉망으로살기 2023. 3. 13. 15:33
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/120876

 

프로그래머스

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

programmers.co.kr

 

이 문제는 레벨0인데도 불구하고 정답률이 50%대에 불과해서 한 푼 풀어보았다. 레벨 0의 문제답게 전체적으로 봤을 때 어려운 부분은 없었으며, 나는 전처리를 통해서 전체 선분을 임의로 만들고 거기에 범위를 지정해 하나씩 더해주는 방식을 택했다.

주의해야 할 부분은 예를 들어 [0,1]와 [1,2]라고 했을 때에는 단순히 인덱스를 통해 graph 배열에 +1 해주는 방식을 통하면 1에 겹친다고 인식이 되는 것인데, 이 부분은 쉽게 생각해서 미만과 이하의 차이라고 생각해서 코딩하면 좋을 것 같다는 생각을 해봤다. 즉, 0 이상 1 미만의 범위와 1 이상 2 미만의 범위라고 한다면 전혀 겹칠 수 없는 범위들이기 때문이다.


문제 및 입출력


코드


class Solution 
{
    public int solution(int[][] lines)
    {
        int answer = 0;
        int min = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;
        
        for(int i=0; i<lines.length; i++)
        {
            min = Math.min(min, lines[i][0]);
            max = Math.max(max, lines[i][1]);
        }
        
        int[] graph = new int[max-min+1];
        
        for(int i=0; i<lines.length; i++)
        {
            int s = lines[i][0]-min;
            int e = lines[i][1]-min;
            
            for(int j=s; j<e; j++)
            {
                graph[j]++;
            }
        }
        for(int i=0; i<graph.length; i++)
        {
            if(graph[i]>1)
            {
                answer++;
            }
        }
        
        return answer;
    }
}

 

반응형