문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
문제 풀이
- 노란색 격자의 가로, 세로 길이는 정해져있다.
- 가로 : 카펫의 가로 길이 - 2
- 세로 : 카펫의 세로 길이 - 2
- 모든 격자(갈색 + 노란색)를 일렬로 나열하고 가로 길이 3부터 등분해본다.
- 등분하였을 때 모든 가로길이가 동일하다면 (나누어 떨어진다)
- 노란색 격자의 가로 길이와 세로 길이가 위 조건에 충족한지 확인한다.
- 충족한다면 가로 길이와 세로 길이를 결과값에 담는다.
- 그렇지 않다면 가로 길이를 증가시킨다.
- 등분하였을 때 모든 가로길이가 동일하다면 (나누어 떨어진다)
- 결과값을 반환한다.
코드 작성
#include <vector>
#include <cmath>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer(2, 0);
// 블록을 한 줄로 나열했을 때의 길이
int area = brown + yellow;
// 카펫의 가로는 최소 3부터 시작한다.
for (int width = 3; width <= area; ++width)
{
if (area % width != 0)
continue;
int height = area / width;
if ((width - 2) * (height - 2) == yellow)
{
answer[0] = max(width, height);
answer[1] = min(width, height);
break;
}
}
return answer;
}'Algorithm > Practice' 카테고리의 다른 글
| [Algorithm] N개의 최소공배수 (0) | 2025.01.24 |
|---|---|
| [Algorithm] 예상 대진표 (0) | 2025.01.23 |
| [Algorithm] 피보나치 수 (0) | 2025.01.23 |
| [Algorithm] 이진 변환 반복하기 (0) | 2025.01.22 |
| [Algorithm] JadenCase 문자열 만들기 (1) | 2025.01.22 |