programmers.co.kr/learn/courses/30/lessons/42842
다른분들은 막 수식으로 한 두줄로 정리해서 푸시던데 나는 그냥 풀었다..
우선 brown+yellow를 해서 총 격자의 갯수를 구해서 (all_rect) 그 총 격자의 약수를 구해줬다.
가로가 세로보다 더 길거나 같다고 했으니 약수는 절반 이상부터 가로의 값으로 비교해보면 된다.
o | o | o | o |
o | o | ||
o | o | o | o |
총 12칸의 4x3 의 예시가 있을 때 o 표시가 쳐진 부분이 테두리이다.
즉 brown의 개수는 (w*2) + (h*2-4) 로 구할 수 있다.
가로의 길이는 첫 번째 줄과 마지막 줄. 그리고 세로는 첫 번째 열과 마지막 열에서 이미 가로의 길이에 더한 값인 네 꼭짓점 부분을 빼주는 것이다.
그럼 총 격자의 수에서 brown을 빼면 마찬가지로 yellow도 나온다.
5분만에 풀었다. 요새 푼 문제 중에 제일 빨리 풀어서 기분이 (아주)좋다.
vector<int> solution(int brown, int yellow) {
vector<int> answer;
int all_rect = brown + yellow;
vector<int> factor; // 약수
for (int i = 1; i <= all_rect; ++i)
{
if (all_rect % i == 0)
{
factor.push_back(i);
}
}
int CD_cnt = factor.size();
for (int w_idx = CD_cnt / 2; w_idx < CD_cnt; ++w_idx)
{
int h = all_rect / factor[w_idx];
int temp = ((h * 2) - 4) + (factor[w_idx] *2);
if (temp == brown)
{
answer.push_back(factor[w_idx]);
answer.push_back(h);
break;
}
}
return answer;
}
'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글
[C++/알고리즘] 프로그래머스 (오픈채팅방) (0) | 2020.10.08 |
---|---|
[C++/알고리즘] 프로그래머스 (JadenCase 문자열 만들기) (0) | 2020.09.25 |
[C++/알고리즘] 프로그래머스 (프린터) (0) | 2020.09.10 |
[C++/알고리즘] 프로그래머스 (문자열 압축) (0) | 2020.09.09 |
[C++/알고리즘] 프로그래머스 (보석 쇼핑) (0) | 2020.09.08 |