문제 풀이/Programmers 문제 풀이

[Programmers]#Level2_카펫

Hardii2 2023. 11. 23. 16:29

 

[Programmers 알고리즘, C++]#Level 2_카펫

 

Programmers 알고리즘 문제 풀이, Level 2_카펫

순수 수학으로 푸는 문제

 


 

#1. 문제

 

#2. 풀이

1. 갈색 격자와 노란색 격자

  1. 최소 가로길이, 최소 세로 길이 : 카펫의 최대 가로 길이는 (갈색 격자 - 2)/2개이며, 최소 세로 길이는 3입니다.
  2. 공식 : 2(W+H)-4 = B 식을 통해 Y값을 도출합니다. 
  3. 갈색 격자와 노란색 격자 : 위 내용들을 통해 가로 길이는 -1로 줄이고, 세로 길이는 +1로 늘리며, 차례대로 Y값을 도출하고, 주어진 Y값과 동일하면, 해당 가로길이와 세로 길이를 결과로 반환합니다.

 

#3. 코드
#include <string>
#include <vector>

using namespace std;

// #1. 카페트의 가로 최대 = (B-2)/2, 카페트의 세로 최소 = 3
// #2. B 값을 통해 Y값을 도출하고, 주어진 Y값과 같다면 W와 H값 반환.
// #3. W = 3 부터 시작, H = 3 부터 시작, 2(W + H) - 4 = B.
// #3. Y = (W-2)*(B-2).

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    
    int W = (brown - 2)/2;
    int H = 3;
    
    while(H <= W)
    {
        int cnt_yellow = (W-2)*(H-2);
        if(cnt_yellow == yellow)
        {
            answer.push_back(W);
            answer.push_back(H);
            break;
        }
        H++;
        W--;
    }

    return answer;
}