지우너

[프로그래머스] 카펫 C++ 본문

Problem Solving

[프로그래머스] 카펫 C++

지옹 2025. 2. 21. 00:07

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이 및 코드

갈색 테두리는 1줄이라고 문제에 나와 있으므로 노란색의 가로 세로에 2를 더해주면 전체 가로 세로 값이 나온다.

가로*세로= 전체 타일의 갯수, 전체 타일의 갯수-노란색 타일의 갯수=갈색 타일의 갯수

노란색 타일의 가로 세로를 완전탐색을 이용해 구하고, 갈색 타일의 갯수와 일치하는지 보면 된다.

#include <string>
#include <cmath>
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    
    // 1. 노란색의 가로 세로 완탐으로 구하기
    for(int i=1; i<=sqrt(yellow); i++){
        if(yellow%i==0){
            int yWight = yellow/i;
            int yHeight = i;
            
            // 2. 갈색의 가로세로는 노란색의 +2
            int width = yWight + 2;
            int height = yHeight + 2;
            
            // 3. [break] 전체에서 노란 타일을 빼면 갈색 타일의 갯수가 나와야 함.
            if((width*height -yellow)==brown){
                answer.push_back(width);
                answer.push_back(height);
                break;
            }
        }
    }
    return answer;
}