프로그래머스

카펫 - 프로그래머스, c++

2023. 2. 2. 23:40

 

 

- 문제 풀이

"완전 탐색"을 사용하는 문제였다.

1. (brown+ yellow)값을 숫자 두개의 곱으로 만들기

2. 3부터 시작하는 for문 만들며 탐색함, yellow가 1부터 시작하기 때문에 그걸 둘러싸려면 전체       높이는 최소 3

    3. if문을 통해 조건 걸기, (가로*세로=sum) 이기 때문에 전체 가로 값은 나누어 떨어져야 함 

        4. 3의 조건을 만족한다면 전체 가로 값 계산하기

        5. sum을 소인수분해할 수 있는 경우는 여러가지기 때문에 소인수분해로 구한 두 숫자가                   red의 조건에 만족하는지 확인하기

 

 

- 코드

제출한 코드는 다음과 같다.

#include <string>
#include <vector>
using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    
    //(brown+ yellow)값을 숫자 두개의 곱으로 만들기
    int sum = brown+yellow; 
    for (int height = 3; ; height++) { //yellow가 1부터 시작하기 때문에 그걸 둘러싸려면 전체 높이는 최소 3
        if (!(sum % height)) {         //(가로*세로=sum) 이기 때문에 전체 가로 값은 나누어 떨어져야 함 
            int weight = sum / height; //전체 가로 값 계산하기
            if (((height - 2) * (weight - 2)) == yellow) { 
                answer.push_back(weight);                    
                answer.push_back(height);
                break;
            }
        }
    }
    
    return answer;
}

(코드 참고: https://mungto.tistory.com/43 )