728x90

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

출처 : 프로그래머스

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

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

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    int carpet = brown + yellow;
    
    //carpet의 약수 구하기 (n가로, m세로)
    for (int m=3; m<carpet/2; m++){
        if (carpet % m == 0){
            int n = carpet / m;
            
            //노란색 개수와 맞는지 확인
            if((m-2)*(n-2) == yellow){
                answer.push_back(n);
                answer.push_back(m);
                break;
            }
        }
    }
    return answer;
}

그림을 그리며 생각해보면 규칙을 찾을 수 있다.

테두리가 갈색이어야하고 가운데에 노란색이 있어야하니까 세로의 최소 길이는 3이다.

3이상부터 가로가 세로보다 같거나 길어야하니까 이 조건을 주의해서 약수를 찾는다.

찾은 약수 쌍 중, 만들 수 있는 노란색의 개수가 네오가 본 노란색의 개수와 같다면 answer에 가로, 세로 추가하고 break

아니면 다른 약수 찾는다.

+ Recent posts