코딩테스트 / / 2026. 1. 26. 10:43

카펫_완전탐색 (프로그래머스 LV2)

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

오늘은 프로그래머스에 있는 완전탐색 문제 카펫을 풀어봤습니다!

 

처음에 공식을 찾으면서 풀려고 하다보니 소요시간은 30분 정도 걸린 것 같습니다ㅠㅠ
풀이 시작하겠습니다!

 

문제설명

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

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

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

 

제한사항

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

 

입출력 예

brown yellow return
10 2 [4,3]
8 1 [3,3]
24 24 [8,6]

 

문제풀이

저는 맨처음에 문제를 읽고 공식을 찾으려고 했고 문제를 읽다보니 몇가지 공식이 보였습니다.

(x = 세로길이, y = 가로길이)

 

1. 부피는 xy이며 이는 각각 칸을 차지하는 brown + yellow와 같다. 즉, xy = brown + yellow

2. 둘레는 (x+y)2이며 이는 테두리인 brown에 +4(겹치는 꼭짓점 부분)를 더한 값이다. 즉, x + y = (brown + 4) / 2

 

이 두가지 공식을 찾았고  1번처럼 brown+yellow값의 약수의 쌍(x,y)을 찾은 후, 2번 공식 x + y = (brown + 4) / 2에 대입하여 나오는 결과를 찾아내면 되는 문제라는 것을 알았습니다!

그래서 나온 코드는

static void Main(string[] args)
{
    int brown = 10;
    int yellow = 2;
    int[] answer = new int[2];

    // 부피는 xy이며 이는 각각 칸을 차지하는 brown + yellow와 같다. 즉, xy = brown + yellow
    // 둘레는 (x+y)2이며 이는 테두리인 brown에 +4(겹치는 꼭짓점 부분)를 더한 값이다. 즉, x + y = (brown + 4) / 2
    int a = brown + yellow;
    int b = (brown + 4) / 2;

    //a의 약수의 쌍을 구한 뒤 약수의 쌍의 합이 b인 것을 구하면 된다.
    // 중복되는 약수의 쌍을 제외하기 위하여 제곱근을 한 값까지만 구한다.

    for (int i = 1; i <= Math.Sqrt(a); i++)
    {
        if (a % i == 0)
        {
            int y = a / i;
            if (i + y == b)
            {
                answer[1] = i;
                answer[0] = y;
            }
        }
    }

    foreach (int i in answer)
        Console.WriteLine(i);
}

이렇게 나왔고 모두 통과할 수 있었습니다!

 

느낀점

이번 문제에서는 공식을 찾는 시야를 조금 더 키워야겠다는 생각을 하게 되었습니다!
그리고 앞으로 더욱 어려운 문제를 짧은 시간에 풀수 있도록 더욱 훈련하겠습니다!

감사합니다!

'코딩테스트' 카테고리의 다른 글

의상_해시 (프로그래머스 LV2)  (0) 2025.06.11
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유