본문 바로가기

algorithm/프로그래머스

프로그래머스_카펫(C++, JAVA)

 

https://programmers.co.kr/learn/courses/30/lessons/42842

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 풀이]

완전 탐색을 이용하여 문제를 풀었습니다.

 

red로 이루어진 직사각형을 구하기 위해 1 ~ red/2 까지 반복문을 이용해서 구해주었습니다. 그 후

(2 * i) + ((red / i + 2) * 2) == brown 의 조건을 통과하면 i + 2,  red / i + 2 을 넣어주었습니다.

[C++]

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int red) {
    vector<int> answer;

    if (red == 1) {
        answer.push_back(3);
        answer.push_back(3);
        return answer;
    }


    for (int i = 1; i <= red / 2; i++) {

        if (red % i == 0) {
            if ((2 * i) + ((red / i + 2) * 2) == brown) {

                answer.push_back((i + 2 > red / i + 2) ? i + 2 : red / i + 2);
                answer.push_back((i + 2 < red / i + 2) ? i + 2 : red / i + 2);
                break;
            }
        }

    }


    return answer;
}

[JAVA]

class Solution {
    public int[] solution(int brown, int yellow) {
    int[] answer = new int[2];
        
    if (yellow == 1) {
        answer[0] = 3;
        answer[1] = 3;
        
        return answer;
    }


    for (int i = 1; i <= yellow / 2; i++) {

        if (yellow % i == 0) {
            if ((2 * i) + ((yellow / i + 2) * 2) == brown) {

                answer[0] = (i + 2 > yellow / i + 2) ? i + 2 : yellow / i + 2;
                answer[1] = (i + 2 < yellow / i + 2) ? i + 2 : yellow / i + 2;
                break;
            }
        }

    }


    return answer;
    }
}