본문 바로가기

코딩테스트/프로그래머스

[프로그래머스] 카펫

728x90
반응형


🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr


728x90

👩‍💻 코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(int brown, int yellow) {
    int area = brown + yellow;
    int i = area % 2 == 0 ? area / 2 : area / 2 + 1;
    int width = 0;
    int height = 0;
    
    for(i; i>0; i--){
        if(area%i == 0){
            width = i;
            height = area/ width;
            
            if((width-2) * (height-2) == yellow){
                break;
            }
        }
    }
    
    return {width, height};
}

반응형

📝 풀이

어떤 방식으로 접근하는게 좋을지 고민하다가 직접 그림을 그려보았다.

카펫의 가로와 세로의 길이를 구하기 위해 넓이를 이용해야겠다는 생각이 들었다.

 

  • brown + yellow (카펫의 넓이) = width * height
  • yellow 면적의 넓이 = (width - 2) * (height - 2)

 

이 두 방정식을 만족하는 가장 큰 width와 height 값을 return 했다.

 

728x90
반응형