[프로그래머스] 겹치는 선분의 길이 문제 풀이(Java)

이하영·2023년 7월 4일
0

코딩테스트

목록 보기
8/21
post-thumbnail
post-custom-banner

✔ 문제 설명

선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.
lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.

선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.


✔ 제한사항

  1. lines의 길이 = 3
  2. lines의 원소의 길이 = 2
  3. 모든 선분은 길이가 1 이상입니다.
  4. lines의 원소는 [a, b] 형태이며, a, b는 각각 선분의 양 끝점 입니다.
    • -100 ≤ a < b ≤ 100

💬 내 풀이

class Solution {
    public int solution(int[][] lines) {
        //1.arr 배열 및 변수 초기화
        int answer = 0;
        int[] arr=new int[200];
        
        //2.lines 정보를 arr 배열에 적용
        for(int i=0; i<lines.length; i++){
         	//음수일 수 있어서, +100을 해주어 치환
            for(int j=lines[i][0]+100; j<lines[i][1]+100; j++){
                arr[j]++;
            }
        }
        
        //3.arr 배열에서 겹친 부분 카운트
        for(int i=0; i<200; i++){
            if(arr[i] >1){
                answer++;
            }
        }
        return answer;
    }
}
  • 배열을 활용하여 문제를 푼다.
    (배열을 만들어 좌표에 따라 걸쳐진 부분 표기)
좌표 값0123456789
arr0000000000
  • 하지만 좌표의 값이 음수일 수 있는데, 음수 번째 배열로 접근할 수 없다.
    → 100씩 더해주어 표기
좌표 값0...100101102103104105106107108109...200
arr00000000000000
  • 예를 들어 [[0, 1], [2, 5], [3, 9]] 세 선분이 있을 때, 배열에 표기해보았다.
좌표 값0...100101102103104105106107108109...200
arr (선분[0,1])00100000000000
arr (선분[2,5])00001110000000
arr (선분[3,9])00000111111000
arr (최종)00101221111000
  • 겹친 부분은 2 이상일 경우를 카운트 해주면 된다.

참고

https://youtu.be/aLYKp3OTh2Q

profile
안녕하세요, 웹 개발자 이하영입니다!
post-custom-banner

0개의 댓글