Link : https://programmers.co.kr/learn/courses/30/lessons/42842
1. 문제
- Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
2. 문제의 조건
- 8 <= brown <= 5,000
- 1 <= yellow <= 2,000,000
- x >= y
더보기
3. 문제 접근
- 아이디어
문제의 유형대로 완전탐색으로 접근하였습니다.
테두리는 무조건 brown으로 정해져야하고 무조건 사각형의 형태를 띄워야함으로 x, y는 2부터 시작하였습니다.
그리고 테두리가 되는 조건을 보면 2x + 2(y-2)가 brown을 만족 할 때 테두리를 가득 채울 수 있습니다.
테두리 개수 구하는 방법은 위 그림과 같습니다. 2x를 하게되면 y-2의 오른쪽, 왼쪽 갯수가 남는것을 확인할 수 있습니다.
해당 식을 만족하면 최소한 "테두리"는 만족을 한다는 것을 알 수 있습니다.
이제 내부를 yellow로 가득 채워야합니다. 이는 (x-2) * (y-2) 가 yellow와 같을 때 만족함으로 해당 식 두개를 한번에 만족하면 답이 되는 것을 확인할 수 있습니다.
4. 풀이 방법
- x와 y는 2부터 진행한다.
- 문제의 조건에 따라 y > x가 되면 탈출한다.
- brown이 2 * x + 2 * (y-2) 를 만족하면서 (x-2) * (y-2) == yellow를 만족하면 그대로 리턴한다.
5. 소스코드
cjw.git@gmail.com
'알고리즘 > programmers' 카테고리의 다른 글
49189: 가장 먼 노드 (0) | 2021.07.27 |
---|---|
42861: 섬 연결하기 (0) | 2021.07.18 |
77485: 행렬 테두리 회전하기 (0) | 2021.06.21 |
76502: 괄호 회전하기 (0) | 2021.06.21 |
12985: 예상 대진표 (0) | 2021.04.05 |
댓글