본문 바로가기
C++ 코딩 문제 풀이/프로그래머스

[Programmers] 카펫

by 섬댕이 2023. 12. 5.

 

 

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

 

프로그래머스

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

programmers.co.kr

 


 

문제 해결 과정

착안

노란색으로 칠해진 격자의 가로, 세로 길이를 각각 $w, h$라고 하면,

  • 갈색으로 칠해진 격자의 수: $brown = 2w+2h+4$
  • 카펫의 가로는 $w+2$, 세로는 $h+2$ 이다.

 

따라서, $w, h \space (w \ge h)$의 값을 찾아내면 카펫의 전체 크기를 알아낼 수 있다.

 

구현

노란색 격자의 수 $yellow$가 주어지면, 카펫의 세로 길이는 가로 길이보다 작거나 같으므로 노란색 격자 부분의 세로 길이 $h$를 1부터 시작하여 아래와 같은 조건을 만족하는지 확인하였다.

  • 조건 1: $w = { yellow }/h$가 자연수이다.
  • 조건 2: 주어진 갈색 격자의 수 ${brown}$에 대해, ${brown} = 2w+2h+4$ 를 만족한다.

 

위의 두 조건을 모두 만족하는 $w, h$를 찾는 경우, 카펫의 가로 길이 $w+2$, 세로 길이 $h+2$를 출력한다.

 

[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~

더보기
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow)
{
    vector<int> answer(2);

    int innerRow = 1;    
    while (true)
    {
        int innerCol = yellow / innerRow;
        if (innerRow * innerCol == yellow)
        {
            if (2 * innerRow + 2 * innerCol + 4 == brown)
            {
                answer[0] = innerCol + 2;
                answer[1] = innerRow + 2;
                break;
            }
        }

        innerRow++;
        continue;
    }
    
    return answer;
}

 

실행 결과

'C++ 코딩 문제 풀이 > 프로그래머스' 카테고리의 다른 글

[Programmers] 마법의 엘리베이터  (1) 2023.12.08
[Programmers] 귤 고르기  (0) 2023.12.06
[Programmers] 프로세스  (1) 2023.12.02
[Programmers] 튜플  (0) 2023.09.25
[Programmers] 괄호 회전하기  (0) 2023.09.07

댓글