ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# 프로그래머스 Lv2 카펫
    코딩테스트 2020. 8. 19. 16:12

    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]

    풀이 

     

    전체 칸 수 10+2 =12

    x가로크기 y세로크기

    x * y == 전체 칸수 가 되는 경우를 찾는다. 단 가로크기가 더 크거나 같다고 했으니 (x>y||x==y)

    12  1

    6    2

    4    3 이 가능 할 것이고

    이 중에서

    위 사각형들 중에서 안에 노란색의 개수가 입력에서의 노란색의 개수와 일치하는지를 판단한다.

    x*2 아래 위 가로크기

    y*2 왼쪽 오른쪽 세로크기

    -4 위 빨간부분 빼면

    갈색 블록의 개수가 나온다. 이것을 전체 칸수에서 빼면 노란색 블록의 개수가 나온다.

    if((width-((x*2)+(y*2)-4))==yellow)

     

    이 조건문에 일치한다면 리턴배열 [0]은 x 그리고 [1]은 y로 입력하고 리턴한다.

     

     

    public class Solution {
        public int[] solution(int brown, int yellow) {
            int[] answer = new int[2] { 0, 0};
                int x, y;
                int width = brown + yellow;
    
                for(int i=1; i<=width;i++)
                {
                    x = i;
                    y = width / x;
                    if (x > y || x==y)
                    {
                        if((width-((x*2)+(y*2)-4))==yellow)
                        {
                            answer[0] = x;
                            answer[1] = y;
                            break;
                        }
                    }
                }
    
    
    
    
                return answer;
        }
    }

     

     

     

     

     

Designed by Tistory.