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

박지예·2023년 9월 8일
0

코딩테스트

목록 보기
8/17

문제

첫번째 시도

       int answer = 0;

        int[] ins = new int[200];

        int start = 0;
        int end = 0;

        for (int i = 0; i < lines.GetLength(0); i++)
        {
            start = lines[i, 0];
            end = lines[i, 1];

            for (int j = start; j <= end; j++)
            {
                ins[Math.Abs(j+100)]++;
            }
        }

        bool isStart = false;

        for (int i = 0; i < ins.Length; i++)
        {
            if (ins[i] >= 2)
            {
                if(!isStart)
                {
                    isStart = true;
                    start = i;

                }
            }
            else
            {
                if (isStart)
                {
                    answer += Math.Abs(i - start - 1);
                    isStart = false;
                }

            }

        }

        return answer;

값을 더해주는 과정에서 마지막 end 인덱스 까지 1을 더해주니,
[[4, 7], [4, 5], [6, 7]], 2
이 반례에서 막혔다.
두 선분의 시작과 끝의 인덱스가 겹치는 과정이 문제였다.


5와 6의 인덱스에서 모두 2로 값이 나온다.

처음에는 따로 end 인덱스 부분을 표시해주려 했지만 그럴 필요가 없다.

정답

        int answer = 0;

        int[] ins = new int[200];

        int start = 0;
        int end = 0;

        for (int i = 0; i < lines.GetLength(0); i++)
        {
            start = lines[i, 0];
            end = lines[i, 1];

            for (int j = start; j < end; j++)
            {
                ins[Math.Abs(j+100)]++;

            }
        }


        for (int i = 0; i < ins.Length; i++)
        {
            if (ins[i] >= 2)
            {
                answer++;
            }

        }

        return answer;

그냥 end 부분까지 증가하지 않으면 훨씬 쉽다.

profile
언젠간 바다로 갈거야!🐋

0개의 댓글