며칠전에 프로그래머스에서 풀었던 문제중에 이해가 잘 가지 않았던 문제가 있었다.
코드는 다음과 같다.
const solution = ([[x1, y1], [x2, y2], [x3, y3], [x4, y4]]) => {
if((y1 - y2) / (x1 - x2) === (y3 - y4) / (x3 - x4)) return 1;
if((y1 - y3) / (x1 - x3) === (y2 - y4) / (x2 - x4)) return 1;
if((y1 - y4) / (x1 - x4) === (y2 - y3) / (x2 - x3)) return 1;
return 0;
}
매개변수에 2차원 배열이 들어가는데, 어떻게 조건식에는 배열이 바로 풀려있는지 이해가 가질않아 다른 사람들의 풀이를 보면서 깨달았다.
function solution(dots) {
if((dots[0][1] - dots[1][1]) / (dots[0][0] - dots[1][0]) === (dots[2][1] - dots[3][1]) / (dots[2][0] - dots[3][0])) return 1
if((dots[0][1] - dots[2][1]) / (dots[0][0] - dots[2][0]) === (dots[1][1] - dots[3][1]) / (dots[1][0] - dots[3][0])) return 1
if((dots[0][1] - dots[3][1]) / (dots[0][0] - dots[3][0]) === (dots[2][1] - dots[1][1]) / (dots[2][0] - dots[1][0])) return 1
return 0
}
문제의 조건처럼 배열 dots=[[x1, y1], [x2, y2], [x3, y3], [x4, y4]] 이므로, 함수의 매개변수 자리에 배열 dots가 들어갈때 요소에 접근하는 식을 쓴다면
그와 반대로 매개변수 자리에 배열이 그대로 들어갈때 배열의 접근과 변수는 서로 같다.
정리하면 다음과 같다.
dots=[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
x1= dots[0][0]
사고의 전환을 하면 풀리는 간단한 문제였다.
역시 이해가 잘 안가거나 무언가 잘 안보인다면, 문제와 개념, 풀이를 유형화 시켜서 외우는게 아니라 기본 개념에 충실하게 개념의 정의대로 따라가 직접 써보고 볼 줄 아는 눈을 길러야한다.