본문 바로가기
JAVA/Coding Test Study

[Lv.2] 카펫 : Java

by ♡˖GYURI˖♡ 2024. 4. 1.
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

 

[알고리즘] 프로그래머스 - 카펫 - JAVA

https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양

easybrother0103.tistory.com

문제 이해가 안 돼서 찾아봤던 블로그...

너무 쉽게 설명해주셔서 약간 허탈해졌다.

 

 

yellow가 최소값인 1일 때의 카펫 모양이다.

이 때 알 수 있는 건 카펫의 가로, 세로가 최소 3이어야 한다는 것이다.

또, (가로 - 2) X (세로 - 2) = yellow 개수 이다.

왼쪽의 예시로 계산해보면 (3 - 2) X (3 - 2) = 1 이 나오게 된다.

한 가지 더 체크해야하는 것은 제한사항에 있던 가로 길이가 세로 길이와 같거나 커야 한다는 점이다.

 

또한 카펫의 가로, 세로 길이는 (brown 개수 + yellow 개수)의 약수가 되어야 한다.

왼쪽의 그림으로 예를 들면 (8 + 1) = 9 이고, 가능한 쌍은 (1, 9), (3, 3), (9, 1)이다.

 

 

 

문제풀이

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

        for (int i = 3; i < sum; i++) {
            int j = sum / i;

            if (sum % i == 0 && j >= 3) {
                int col = Math.max(i, j);
                int row = Math.min(i, j);

                int center = (col - 2) * (row - 2);

                if (center == yellow) {
                    answer[0] = col;
                    answer[1] = row;
                    return answer;
                }
            }
        }

        return answer;
    }
}

 

        int[] answer = new int[2];
        int sum = brown + yellow;

 

가로, 세로 값을 반환하면 되니 answer의 크기는 2로 설정한다.

brown 개수와 yellow 개수를 더한 sum을 만들어둔다.

 

        for (int i = 3; i < sum; i++) {
            int j = sum / i;

 

가로, 세로의 최소값이 3이니 i = 3부터 시작한다.

j는 sum을 i로 나눈 값이다.

 

            if (sum % i == 0 && j >= 3) {

 

만약 i가 sum의 약수이고 (and) j가 3 이상이라면 조건을 만족한 것이니 if문 내부를 실행한다.

 

                int col = Math.max(i, j);
                int row = Math.min(i, j);

                int center = (col - 2) * (row - 2);

 

col(가로) 값이 row(세로) 값보다 커야하니 col은 Math.max, row는 Math.min을 사용한다.

center는 yellow 값이다.

 

                if (center == yellow) {
                    answer[0] = col;
                    answer[1] = row;
                    return answer;
                }

 

만약 위에서 구한 center 값이 yellow 값과 일치한다면 모든 조건을 만족한 것이니 return해준다.

'JAVA > Coding Test Study' 카테고리의 다른 글

[Lv.1] 모의고사 : Java  (1) 2024.04.01
[Lv.1] 소수 찾기 : Java  (0) 2024.04.01
[Lv.3] 여행경로 : Java  (0) 2024.03.27
[Lv.2] 수식 최대화 : Java  (2) 2024.03.27
[Lv.3] 단어 변환 : Java  (0) 2024.03.27