https://school.programmers.co.kr/learn/courses/30/lessons/42842
문제 해결 과정
착안
노란색으로 칠해진 격자의 가로, 세로 길이를 각각 $w, h$라고 하면,
- 갈색으로 칠해진 격자의 수: $brown = 2w+2h+4$
- 카펫의 가로는 $w+2$, 세로는 $h+2$ 이다.
따라서, $w, h \space (w \ge h)$의 값을 찾아내면 카펫의 전체 크기를 알아낼 수 있다.
구현
노란색 격자의 수 $yellow$가 주어지면, 카펫의 세로 길이는 가로 길이보다 작거나 같으므로 노란색 격자 부분의 세로 길이 $h$를 1부터 시작하여 아래와 같은 조건을 만족하는지 확인하였다.
- 조건 1: $w = { yellow }/h$가 자연수이다.
- 조건 2: 주어진 갈색 격자의 수 ${brown}$에 대해, ${brown} = 2w+2h+4$ 를 만족한다.
위의 두 조건을 모두 만족하는 $w, h$를 찾는 경우, 카펫의 가로 길이 $w+2$, 세로 길이 $h+2$를 출력한다.
[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~
더보기
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow)
{
vector<int> answer(2);
int innerRow = 1;
while (true)
{
int innerCol = yellow / innerRow;
if (innerRow * innerCol == yellow)
{
if (2 * innerRow + 2 * innerCol + 4 == brown)
{
answer[0] = innerCol + 2;
answer[1] = innerRow + 2;
break;
}
}
innerRow++;
continue;
}
return answer;
}
실행 결과
'C++ 코딩 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[Programmers] 마법의 엘리베이터 (1) | 2023.12.08 |
---|---|
[Programmers] 귤 고르기 (0) | 2023.12.06 |
[Programmers] 프로세스 (1) | 2023.12.02 |
[Programmers] 튜플 (0) | 2023.09.25 |
[Programmers] 괄호 회전하기 (0) | 2023.09.07 |
댓글