C#/프로그래머스 코딩 문제 풀이

[프로그래머스 C#] Lv.2 카펫(완전탐색)

ForMan_ 2024. 5. 22. 18:04

1. 문제설명

 

2. 나의풀이

  • 완전탐색 알고리즘 문제로 나온 프로그래머스 2단계 카펫 문제.
  • 입출력 예시를 유심히 보고  brown과 yellow의 합의 약수 중 짝지어진 두 수의 곱이라는 것을 깨달음.
  • answer의 0번방에는 가로의 길이 즉, 1번방인 세로보다 같거나 큰 수가 와야하기 때문에 빠르게 가로의 길이를 구해주기 위해 반복문을 뒤에서부터 탔음.
  • 아래 코드에서 num은 i보다 같거나 작을 수 밖에 없음.
  • num은 무조건 2보다 큼. yellow가 최소 1이기때문에 최소 가로 세로 길이는 3임.
  • 가로, 세로를 구하고 2배를 더해주면 4개의 꼭짓점이 중복으로 더해짐. 그래서 -4해줌.         
public int[] solution(int brown, int yellow)
    {
        int[] answer = new int[2];

        int sum = brown + yellow;

        for (int i = sum; i > 2; i--)
        {
            if (sum % i != 0)
                continue;

            int num = sum / i;
            if(i >= num && num > 2)
            {
                int w = i;
                int h = num;

                if(brown == (w + h) * 2 - 4)
                {
                    answer[0] = w;
                    answer[1] = h;
                    break;
                }
            }
        }

        return answer;
    }