323. 카펫
1. Python
def solution(brown, yellow):
answer = []
all = brown + yellow
for i in range(brown):
for j in range(brown):
if i * j == all and ((i * 2) + (j * 2) - 4) == brown:
if i >= j:
answer.append(i)
answer.append(j)
if answer:
break
return answer
2. C++
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer;
int all = brown + yellow;
for (int i = 0; i < brown; i++){
for (int j = 0; j < brown; j++){
if (i * j == all && ((i * 2) + (j * 2) - 4) == brown){
if (i >= j){
answer.push_back(i);
answer.push_back(j);
}
}
}
if (answer.size()) break;
}
return answer;
}
다른사람 풀이
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow) {
int len = brown / 2 + 2;
int w = len - 3;
int h = 3;
while(w >= h){
if(w * h == (brown + yellow)) break;
w--;
h++;
}
return vector<int>{w, h};
}
- w: 가로, h: 세로
-
w * h = brown + yellow
,(w-2) * (h-2) = yellow
두 식을 yellow를 대입해서 연립방정식으로 풀어보면
w = brown/2 + 2 - h, h = n(단, n은 자연수)
-
h값이 변함에 따라서 w값은 자연스럽게 바뀐다.
-
h가 1 늘어난다는 것은 w가 1 줄어드는 것과 같다.
-
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
따라서, width, height는 최소 3, 3
3. Javascript
function solution(brown, yellow) {
let len = brown / 2 + 2;
let w = len - 3;
let h = 3;
while(w >= h){
if(w * h == (brown + yellow)) break;
w--;
h++;
}
return [w, h];
}
Author And Source
이 문제에 관하여(323. 카펫), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@corone_hi/323.-카펫저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)