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; } }