본문 바로가기
알고리즘/programmers

42842: 카펫

by cjw.git 2021. 7. 18.

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

댓글