[프로그래머스/C++ 문제 풀이] Lv. 2 - 카펫

2024. 8. 25. 10:02·코딩테스트/프로그래머스 (Lv. 2)
728x90
반응형

문제 설명

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

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

입출력 예


문제 풀이

이번 문제는 직사각형의 가로와 세로 길이를 구하는 문제입니다.

 

문제에서 직사각형의 테두리 길이와, 테두리를 제외한 넓이가 주어지기에 가로, 세로 값을 증가시키며 알맞는 가로, 세로 크기를 구하는 방식으로 문제를 해결하였습니다.

 

예를 들어, 가로가 n, 세로가 m일때 일차원적으로 생각해보자면 중앙 yellow의 크기는 언제나 (n - 2) * (m - 2)이며, 테두리의 길이는 (n * 2) + (m * 2) - 4인 것을 쉽게 알 수 있습니다.

 

즉, 언제나 가로가 세로보다 같거나 길다는 조건이 주어졌기에 가로는 최소 크기인 3부터 순회하며 되며, 세로의 경우 3부터 가로 크기까지만 순회하며 모든 길이를 탐색하는 방식으로 문제를 해결하게 되었습니다.

정답 코드

더보기

풀이 시간 : 13m 46s

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    
    // 가로 세로가 n, m일때 중앙의 크기는 다음과 같다.
    // - (n - 2) * (m - 2)
    // - 이를 이용해 가로 세로 크기를 맞추고 Yellow의 수와 일치하는지 확인해보기
    
    // w가 언제나 h보다 같거나 크기에 다음과 같이 순회하도록 합니다.
    for (int w = 3; w <= 2500; w++)
    {
        for (int h = 3; h <= w; h++)
        {
            // 사각형의 테두리 크기 구하기
            int cnt = (w * 2) + (h * 2) - 4;
            
            // 만약 사각형의 테두리가 total과 동일하다면?
            if (cnt == brown)
            {
                // yellow 체크
                if ((w - 2) * (h - 2) == yellow)
                {
                    answer.push_back(w);
                    answer.push_back(h);
                    
                    return answer;
                }
            }
        }
    }
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스 (Lv. 2)' 카테고리의 다른 글

[프로그래머스/C++ 문제 풀이] Lv. 2 - 구명보트  (0) 2024.08.26
[프로그래머스/C++ 문제 풀이] Lv. 2 - 점프와 순간 이동  (0) 2024.08.26
[프로그래머스/C++ 문제 풀이] Lv. 2 - 짝지어 제거하기  (0) 2024.08.24
[프로그래머스/C++ 문제 풀이] Lv. 2 - 피보나치 수  (0) 2024.08.23
[프로그래머스/C++ 문제 풀이] Lv. 2 - 다음 큰 숫자  (0) 2024.08.23
'코딩테스트/프로그래머스 (Lv. 2)' 카테고리의 다른 글
  • [프로그래머스/C++ 문제 풀이] Lv. 2 - 구명보트
  • [프로그래머스/C++ 문제 풀이] Lv. 2 - 점프와 순간 이동
  • [프로그래머스/C++ 문제 풀이] Lv. 2 - 짝지어 제거하기
  • [프로그래머스/C++ 문제 풀이] Lv. 2 - 피보나치 수
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c#
    fruitspuzzle
    unrealengine
    프로젝트
    구현
    Algorithm
    2019 kakao
    issac3d
    dataasset
    백준
    sesac
    delegate
    프로그래머스
    timelessadventure
    ai controller
    2022 kakao
    project t.a develop
    청년취업사관학교
    C++
    unity
    CS지식
    Summer/Winter Coding
    pcce 기출문제
    코딩테스트
    fsoftobjectpath
    후기
    tsoftobjectptr
    프로세스
    Unreal Engine
    2018 kakao
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[프로그래머스/C++ 문제 풀이] Lv. 2 - 카펫
상단으로

티스토리툴바