문제정리

카펫 중앙에 노란색 테두리 갈색
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 길다.
갈색 개수, 노란색 개수를 주어지며, return은 가로, 세로 크기를 순서대

세로 길이는 최소 3개 이상 이라는 조건을 빠트리고 생각함..

 

처음 작성한 코드

class Solution {
    public int[] solution(int brown, int yellow) {

        int x = brown / 2;
        int a = 0;
        int b = 0;
        int sum = brown + yellow;

        for (int i = 2; i < x; i++) {
            if (a < b) {
                break;
            }
            if (sum % i == 0) {
                a = sum / i;
                b = i;
            } else {
                continue;
            }

        }
        int[] answer = {b, a};

        return answer;
    }
}

 

위 코드에서는 노란색개수를 고려하지 않았고, 그냥 단순히 brown + yeollow를 더하면 전체 카펫의 크기가 되고, % i를 해서 나머지가 0이 되는 것만 찾아서 가로 세로 최소로 곱셈 하는 걸 찾아서 리턴 시킨건데 실패..

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];

        int carpet = brown + yellow;

        for (int i = 3; i <= carpet; i++) {
            int col = i; // 세로
            int row = carpet / col; // 가로

            if (row >= col) {
                if ((row - 2) * (col - 2) == yellow) {
                    answer[0] = row;
                    answer[1] = col;
                    break;
                }
            }

        }
        return answer;
    }

}

 

 3개 이상인 조건도 걸어주고 yellow 개수도 조건을 걸어줌

 

시간은

 

테스트 코드에서는 성공하고 최종 제출에서 막히면.. 시간이 더 오래 걸리게 되는 것 같다.. 또다른 조건을 생각해내야 하니깐.. 문제를 잘 분석하는게 중요........

+ Recent posts