Contents

평행 (with.Java)

   May 14, 2024     2 min read

β€œν‰ν–‰ (with.Java)” λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ νšŒκ³ μ™€ λ‹€λ₯Έ 풀이 방법을 μ•Œμ•„λ³΄λ©°, μ•Œμ•„κ°€κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

점 λ„€ 개의 μ’Œν‘œλ₯Ό 담은 이차원 λ°°μ—΄ dotsκ°€ λ‹€μŒκ³Ό 같이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€.

[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

주어진 λ„€ 개의 점을 두 κ°œμ”© μ΄μ—ˆμ„ λ•Œ, 두 직선이 평행이 λ˜λŠ” κ²½μš°κ°€ 있으면 1을 μ—†μœΌλ©΄ 0을 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄λ³΄μ„Έμš”.

μ œν•œμ‚¬ν•­

  • dots의 길이 = 4
  • dots의 μ›μ†ŒλŠ” [x, y] ν˜•νƒœμ΄λ©° x, yλŠ” μ •μˆ˜μž…λ‹ˆλ‹€.
  • 0 ≀ x, y ≀ 100
  • μ„œλ‘œ λ‹€λ₯Έ λ‘κ°œ μ΄μƒμ˜ 점이 κ²ΉμΉ˜λŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • 두 직선이 κ²ΉμΉ˜λŠ” 경우(μΌμΉ˜ν•˜λŠ” 경우)에도 1을 return ν•΄μ£Όμ„Έμš”.
  • μž„μ˜μ˜ 두 점을 이은 직선이 xμΆ• λ˜λŠ” yμΆ•κ³Ό ν‰ν–‰ν•œ κ²½μš°λŠ” 주어지지 μ•ŠμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ μ˜ˆμ‹œ

dotsresult
[[1, 4], [9, 2], [3, 8], [11, 6]]1
[[3, 5], [4, 1], [2, 4], [5, 10]]0

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        for(int i =0; i<dots.length;i++) {

                float temp =gradient(dots[i],dots[(i+1)%4]);
                float temp2 =gradient(dots[(i+2)%4],dots[(i+3)%4]);

                if(temp==temp2) {
                    answer = 1;
                }
        }
        return answer;
    }
    public static float gradient(int[]a1,int[]a2) {
        float denom,mole;

            denom= a1[0]-a2[0];
            mole= a1[1]-a2[1];

        return mole/denom;
    }
}

풀이 μ„€λͺ…

solution λ©”μ„œλ“œλŠ” 주어진 점 배열인 dotsλ₯Ό 인자둜 λ°›μŠ΅λ‹ˆλ‹€.

answer λ³€μˆ˜λŠ” μ‚¬κ°ν˜• μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ²°κ³Όλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

μ΄ˆκΈ°μ—λŠ” 0으둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

for λ£¨ν”„λŠ” dots 배열을 μˆœνšŒν•©λ‹ˆλ‹€.

이 λ•Œ i번째 점을 κΈ°μ€€μœΌλ‘œ ν•΄λ‹Ή 점을 μ œμ™Έν•œ λ‹€λ₯Έ μ„Έ 개의 점듀 κ°„μ˜ 기울기λ₯Ό λΉ„κ΅ν•©λ‹ˆλ‹€.

gradient λ©”μ„œλ“œλŠ” 두 점 μ‚¬μ΄μ˜ 기울기λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 두 점이 μ΄λ£¨λŠ” μ„ μ˜ 기울기λ₯Ό ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ λͺ¨λ“  λ³€μ˜ κΈ°μšΈκΈ°κ°€ κ°™λ‹€λ©΄ (temp와 temp2κ°€ κ°™λ‹€λ©΄) answerλ₯Ό 1둜 μ„€μ •ν•©λ‹ˆλ‹€.

λͺ¨λ“  루프λ₯Ό 마친 뒀에 answer 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

주어진 점듀을 μ΄μš©ν•˜μ—¬ μ‚¬κ°ν˜•μ„ μ΄λ£¨λŠ”μ§€ ν™•μΈν•˜λŠ” κ°„λ‹¨ν•œ 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.

주어진 λ¬Έμ œμ— 따라 점의 κ°œμˆ˜μ™€ λ°°μ—΄μ˜ ν˜•νƒœκ°€ 변경될 수 μžˆμ§€λ§Œ, ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€κ°ν˜•μ˜ ν˜•νƒœλ₯Ό νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.