[Programmers] 카펫

iinnuyh_s·2024년 1월 4일
0

Programmers

목록 보기
7/8
post-thumbnail

카펫

풀이

  • 간단 구현.
  • 가로+세로 = (Brown/2)+2, 가로*세로 = Yellow+Brown 인 것만 알면 풀 수 있다.
  • 위 두 조건을 만족시키는 가로, 세로를 찾으면 된다!
    class Solution {
        public int[] solution(int brown, int yellow) {
            int[] answer = new int[2];
            int multi = yellow+brown;
            int sum = brown/2+2;
            for(int i=1;i<=multi;i++){
                if(multi%i==0){
                    int a = i;
                    int b = multi/i;
                    if(a+b==sum){
                        if(a>b){
                            answer[0] = a;
                            answer[1] = b;
                        }
                        else{
                            answer[0] =b;
                            answer[1] = a;
                        }
                    }
                }
            }
            return answer;
        }
    }

    multi의 약수들 중에서, 더해서 sum이 되는 수들을 찾으면 된다.
    가로가 세로보다 크거나 같다고 했으므로, 큰 수를 answer[0]에, 작은수를 answer[1]에 넣어주면 끝!

  • 보충
    - 약수를 구할 때, for(int i=2;i<=Math.sqrt(multi);i++) 로 제곱근을 사용하면 시간이 훨씬 단축된다. 앞으로 약수는 이렇게 구하자!

0개의 댓글