323. 카펫

아현·2021년 11월 10일
0

Algorithm

목록 보기
347/400

프로그래머스




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];
}



profile
Studying Computer Science

0개의 댓글