최대 1 분 소요

Programmers의 평행이라는 문제를 다 같이 풀어보았습니다.




📖 문제

image


✏️ 나의 풀이

def solution(dots):
    answer = 0
    
    a1 = dots[0]
    dots.remove(a1)
    
    for i in range(len(dots)):
        a2 = dots[i]
        b1 = dots[(i+1)%len(dots)]
        b2 = dots[(i+2)%len(dots)]
        
        grad1 = (a1[1]-a2[1])/(a1[0]-a2[0])
        grad2 = (b1[1]-b2[1])/(b1[0]-b2[0])
        if grad1 == grad2:
            answer = 1
            
    return answer
  1. 4개의 점을 2개 2개로 나누는 경우는 3가지이다. (0번-1번/2번-3번, 0번-2번/1번-3번, 0번-3번/1번-2번)
  2. 그렇기에 한 점을 a1이라는 변수에 할당한 뒤 dots에서 제거해준다. (for문을 편하게 하기 위해)
  3. 0번과 이어지는 점이 각각 1번, 2번, 3번이므로 for문을 이용해 a2변수게 악각 할당한 후 나머지 두 점을 b1b2에 할당해준다.
    (이 때, dots는 현재 3개의 점이 있을 것이고, a2의 인덱스에 1과 2를 더해준 후 전체 길이로 나눈 나머지를 이용하여 각각 점을 할당해주었다.)
  4. 이후 기울기 = y변화량 / x변화량 을 이용하여 각 직선의 기울기를 grad1grad2라는 변수에 할당해주었다.
  5. 조건문을 사용하여 두 기울기가 같은 경우 1, 다른 경우 0이 나오게끔 하였다.
    (직선이 일치하는 경우도 출력값이 1이 나와야하므로 따로 일치하는 경우를 제거해주지는 않았다.)


💡 느낀점

  1. 스터디원 중 한 명은 수학 식이 기억이 나지 않아 식을 사용하지 않고 푸는 방법을 제시하였다.
    깔끔하게 떨어지면 좋겠지만, 기억이 나지 않거나 잘 모르겠을 때에도 최선을 다하는 모습이 인상깊었다.





잘못된 내용이나 피드백은 언제나 환영입니다.
출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

업데이트:

댓글남기기