-
[프로그래머스 level 2] 카펫알고리즘 문제풀이/JavaScript 2020. 1. 23. 22:06
문제
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 빨간색으로 칠해져 있고 모서리는 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 빨간색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 빨간색 격자의 수 red가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 빨간색 격자의 수 red는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
brown red return
10 2 [4, 3] 8 1 [3, 3] 24 24 [8, 6]
해설
처음 문제를 보면서 바로바로 공식화 해보았다.
red = m * n; brown = (m + 2) * (n + 2) - red // 이 때의 m, n을 구하라(m >= n)
저 공식을 기준으로 코드를 구성했다. 완전탐색 카테고리에 속해서 긴장했는데, 생각보다 쉽게 해결할 수 있었다.
function solution(brown, red) { var n = 0; for(var m = red; m >= 1; m--){ n = Math.floor(red / m); if(red % m == 0 && ((m + 2) * (n + 2) == (brown + red))) return [m + 2, n + 2] } }
느낀 점
- 이 문제는 무얼 느낄 거라 할 것도 없이 풀어버려서.. 어떻게 하면 시간 복잡도를 낮출 수 있을까 고민을 했는데, 이 고민이 값졌던 것 같다.
'알고리즘 문제풀이 > JavaScript' 카테고리의 다른 글
[프로그래머스 Level 2] 멀쩡한 사각형 (0) 2020.02.01 [프로그래머스 Level 2] 스킬트리 (0) 2020.02.01 [프로그래머스 level 2] 타겟 넘버 (0) 2020.01.23 [프로그래머스 level 2] H - Index (0) 2020.01.23 [프로그래머스 level 2] 다리를 지나는 트럭 (0) 2020.01.22