겹치는 선분의 길이

김세호·2022년 12월 8일
0

문제


내 풀이

import java.util.*;
class Solution {
    public int solution(int[][] lines) {
        int answer = 0;
        //line1,line2,line3은 lines의 선분을 좌표화 하여 담은 list
        ArrayList<Integer> line1 = new ArrayList<Integer>();
        ArrayList<Integer> line2 = new ArrayList<Integer>();
        ArrayList<Integer> line3 = new ArrayList<Integer>();
        //test12,test23,test31은 두 line의 겹쳐지는 선분을 좌표화 하여 담은 list
        //예를들어 test12는 line1과 line2의 겹쳐지는 선분을 좌표화 하여 담은 list
        ArrayList<Integer> test12 = new ArrayList<Integer>();
        ArrayList<Integer> test23 = new ArrayList<Integer>();
        ArrayList<Integer> test31 = new ArrayList<Integer>();
        //test123은 line1, line2, line3 세 line이 모두 겹쳐지는 선분을 좌표화 하여 담은 list
        ArrayList<Integer> test123 = new ArrayList<Integer>();
        //각 line을 좌표화 하여 담는 과정
        line(lines[0][0],lines[0][1],line1);//line1
        line(lines[1][0],lines[1][1],line2);//line2
        line(lines[2][0],lines[2][1],line3);//line3
        //두 line이 겹쳐지는 선분을 좌표화 하여 담는 과정
        testResult(line1,line2,test12);//line1과 line2의 겹쳐지는 선분을 좌표화 하여 담는 과정
        testResult(line2,line3,test23);//line2와 line3의 겹쳐지는 선분을 좌표화 하여 담는 과정
        testResult(line3,line1,test31);//line3와 line1의 겹쳐지는 선분을 좌표화 하여 담는 과정
        //세 line이 모두 겹쳐지는 선분을 좌표화 하여 담는 과정
        testResult(test12,line3,test123);// line1, line2, line3 모두 겹쳐지는 선분을 좌표화 하여 남는 과정
        //answer = 두 line이 겹쳐지는 선분길이를 모두 더하고, 그 중 세 line이 겹쳐지는 선분의 길이 때문에 중복되는 부분을 2번 빼준다.
        answer = test12.size()+test23.size()+test31.size()-2*test123.size();  
        return answer;
    }
    //메소드
    //line의 start 좌표, end좌표 line을 담을 list를 매개변수로 넣으면, 그 선분의 길이(좌표의 시작점들)를 담아 list로 리턴하는 메소드
    public ArrayList<Integer> line (int start , int end ,ArrayList<Integer> list){
        for(int i = start ; i<= end-1 ; i++){
            list.add(i);
        }
        return list;
    }
    //겹쳐지는 부분을 확인할 두 line과 겹쳐진 부분을 담을 list를 매개변수로 넣으면, 겹쳐지는 선분의 길이(좌표의 시작점들)를 담아 list 리턴하는 메소드
    public ArrayList<Integer> testResult (ArrayList<Integer> testLine1, ArrayList<Integer> testLine2, ArrayList<Integer> list){
        for(int i = 0 ; i<testLine1.size();i++){
            for(int j = 0 ; j<testLine2.size();j++){
                if(testLine1.get(i)==testLine2.get(j)){
                    list.add(testLine1.get(i));
                }
            }
        }
        return list;
    }
}

다른 사람 풀이 (내일 분석하기)

class Solution {
  public int solution(int[][] lines) {
      int[] result = new int[201];
      int mid = 100;
      for (int[] line : lines) {
          int max = Math.max(mid + line[0], mid + line[1]);
          int min = Math.min(mid + line[0], mid + line[1]);
          for (int i = min; i < max; i++) {
              result[i]++;
          }
      }
      int answer = 0;
      for (int r : result) {
          if (r >= 2) {
              answer++;
          }
      }
      return answer;
  }
}
  

0개의 댓글