본문 바로가기
개발공간

C# 카펫 [프로그래머스 Level 2]

by -0o0- 2021. 8. 25.

C# 카펫 [프로그래머스 Level 2]

코드 바로보기


문제 설명

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]

코드

using System;

public class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        
        //yellow를 기준으로 가로, 세로 길이 변수 초기화
        int width = 0;
        int height = 0;
        
        //yellow를 기준으로 반복
        for(int i = 1; i<=yellow; i++)
        {
            //i를 높이로 가정했을 때 넓이는 yellow/i 이므로 
            //yellow%i 나머지가 0이면 각각 넓이와 높이 설정
            if(yellow%i==0)
            {
                width = yellow/i;
                height = i;
                
                //카펫의 가로길이가 세로길이와 같거나 길면
                if(height<=width)
                {
                    //yellow의 가로, 세로 길이에 2를 더하면 brown의 가로세로 길이가 나오고
                    //brown의 가로 세로 길이를 곱하면 brown + yellow의 크기가 된다.
                    if((width+2) * (height+2) == brown + yellow)
                    {
                        answer = new int[] {width+2, height+2};
                        return answer;
                    }
                }
            }
        }
         return answer;
    }
}

댓글