https://school.programmers.co.kr/learn/courses/30/lessons/42842
나의 풀이
function solution(brown, yellow) {
let y = 1;
while(y < 2_000_000){
const result = y**2 - (2 + brown / 2) * y + brown + yellow;
if(!result) break;
y++
}
return [brown / 2+2 -y, y]
}
brown = (가로 + 세로) * 2 - 4 이다 ( 4개의 꼭지점이 중복되기에 -4이다.)
yellow = (가로 - 2)(세로 -2) 이다. ( 노란색은 갈색으로 무조건 둘러쌓여있어야 하기 때문이다.)
여기서 방정식으로 풀까 하다가 감이 안 잡혀서 질문하기를 봤는데 실제로 방정식으로 풀으신 분이 있으셔서 참고했다.
가로 세로를 각각 xy로 치환을 하자
brown = 2x + 2y - 4
yellow = (x - 2)(y - 2)
x = ( brown/2) -y + 2
x-2 = (brown/2) -y
yellow = ((brown/2) -y )(y-2)
(y - (brown/2))(y-2) = - yellow
y**2 - (2 + (brown/2))y + brown + yellow = 0
이렇게 해서 식이 완성되었다.
y를 1부터 지속적으로 대입해서 0이되는 값이 방정식에의해 정답이 된다.
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스] level.2 N개의 최소공배수 (*) (1) | 2022.09.30 |
---|---|
[프로그래머스] level.2 구명보트 (**) (1) | 2022.09.29 |
[프로그래머스] level.2 짝지어 제거하기 (1) | 2022.09.26 |
[프로그래머스] level.2 숫자의 표현 (0) | 2022.09.26 |
[프로그래머스] level.2 다음 큰 숫자 (0) | 2022.09.24 |