본문 바로가기
문제풀이/프로그래머스

[JAVA , Lv.2] 카펫

by PhoB 2023. 2. 3.

[문제]

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

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

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



[제한사항]

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


[내 풀이]

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        
        int sum = brown + yellow; 
        for(int i=3; i<=brown; i++){
            if(sum%i==0){
                int k = sum/i;
                if(i>=k && (i-2)*(k-2)==yellow){
                    answer[0] = i;
                    answer[1] = k;
                    break;
                }
            }
        }
        return answer;
    }
}


[접근]

나 혼자만의 생각으로는 풀지못하고 다른사람들의 도움을 받아가며 풀었던 문제였다,

겉보기에는 쉬워보인다고 생각했는데. 아니였던것 같다.

각설하고 이문제를 풀때 생각해야할 것은 노란색타일은 무조건 붙어있다는 것과 사각형의 형태를 띄고있다는 점을 기억해야한다.

i가 3부터 시작하는 이유는 문제가 성립하기 위한 최소의 경우가 3X3인 경우이기 때문이다.

이후 전체 타일갯수(brown + yellow)에서 높이(i)로 나눴을때 나누어 떨어져야 사각형이 성립이 된다

이후 (높이-2)*(너비-2)를 통해서 주어진 노란타일의 수와 비교해주어 알맞은 높이와 너비를 찾아주자.

'문제풀이 > 프로그래머스' 카테고리의 다른 글

[JAVA , Lv.2] N개의 최소공배수  (0) 2023.02.03
[JAVA , Lv.2] 구명보트  (0) 2023.02.03
[JAVA , Lv.2] 영어 끝말잇기  (0) 2023.02.03
[JAVA , Lv.2] 짝지어 제거하기  (0) 2023.01.19
[JAVA , Lv2] 다음 큰 숫자  (0) 2023.01.19