본문 바로가기
PS/프로그래머스

[프로그래머스 *Java] - 카펫

by Jman 2022. 7. 21.

https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

프로그래머스

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

programmers.co.kr

조건

제한시간 : 45분 이내

 

규칙을 찾으면 되는 문제였다.

생각했던 Flow를 적어보도록 하겠다.

1. brown + yellow == return 값 두 데이터의 곱이다.
2. 일단 brown + yellow 더한 값을 for문을 통해 i가 1부터 시작해서 i로 나눠 떨어지는 여러 두 수 중 한 가지 경우가 답이다.
3. 정사각형, 직사각형 어떤 도형이 될진 모르겠지만, 세로는 무조건 3 이상이여야 한다. 즉, i는 3부터 시작하면 되겠다.
4. i를 세로라 생각하고, 가로는 brown+yellow/i(세로) 라 생각하기
5. 가로 세로를 가지고 brown, yellow 규칙 찾아보기
6. (가로 * 2) + (세로 * 2) - 4 를 하게 되면, 우리가 알고 있는 brown 값을 찾을 수 있음
7. 찾은 brown 값을 가지고 brown + yellow (입력 받은 값) - brown(찾은 값) 하면 yellow 를 찾을 수 있음
class Solution {
public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int totalCnt = brown + yellow;
        for (int i = 3; i < totalCnt; i++) {
            if(totalCnt % i == 0) {
                int w = totalCnt / i;
                int h = i;
                int x = (w * 2) + (h * 2) - 4;
                if(x == brown) {
                    answer[0] = w;
                    answer[1] = h;
                    break;
                }
            }
        }
        return answer;
    }
}

 

 

다른 방법

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        for(int i = 1; i <= yellow; i++)
        {
            if(yellow % i == 0)
            {
                if(2 * i + (2 * yellow / i) == brown - 4)
                {
                    answer[0] = i + 2;
                    answer[1] = yellow / i + 2;
                }
            }
        }
    }
}