[JAVA] 카펫

NoHae·2025년 1월 16일
0

velog 버그 때문에 다시 올립니다.

문제 출처

코딩테스트 연습 > 완전탐색 > 카펫
https://school.programmers.co.kr/learn/courses/30/lessons/42842

문제 설명

격자 모양 카펫이 있다. 이 카펫에는 중앙에는 yellow, 테두리에는 brown로 칠해져있다. yellow의 갯수와 brown 갯수가 주어질 때, 카펫의 가로,세로를 배열로 return 하라

가로는 세로보다 같거나 길다.

접근 방법

brown과 yellow의 합은 전체 카펫의 넓이(총 갯수, total)이다.
for문을 이용하여 i(가로)를 기준으로 점차 줄여가면서 total를 i로 나눴을 때, 0이 되는 i를 찾는다.

yellow는 (가로 - 2) X (세로 - 2) 이므로
yellow == (i - 2) * (total/i - 2)가 되는 i를 구한다.
이후 answer 배열에 가로는 i, 세로는 total/i를 넣어서 answer을 return한다.

% for문의 i는 시작을 total에서 점차 줄여가므로 가로가 세로보다 길다.

class Solution {
    public int[] solution(int brown, int yellow) {
        
        int total = brown + yellow;
        int w = 0;
        int h = 0;
        int[] answer = new int[2];
        for(int i = total; i>2; i--){
            if(total % i != 0) continue;
            else{
                if(yellow == (i-2) * (total/(i)-2)){
                    w = i;
                    h = total/i;
                    answer[0] = w;
                    answer[1] = h;
                    
                    return answer;
                }
            }
        }
        return answer;
    }
}

Review

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = {0,0};
        
        int total= brown + yellow;
        
        for(int i = total; i>2; i--){
            if((i-2) * ((total/i)-2) == yellow){
                return new int[] {i,total/i};
            }
        }
        return answer;
    }
}

알게된 점

어렵지 않은 문제였다. 처음에 "어떻게 노란색, 갈색 갯수만으로 어떻게 가로, 세로를 구하지?" 란 의문이 있었으나. 문제 처음 시작에 중앙은 노란색, 테두리는 갈색 이라는 문구를 보고 풀었다.

문제푼 흔적



Review

profile
노력 해보려고 하는 사람(00년생 소프트웨어융합학과, 24년 12월 부터 백엔드 및 코테 공부 시작)

0개의 댓글