본문 바로가기

프로그래머스

[프로그래머스/Java] 카펫

📚 카펫

[JAVA] 프로그래머스 Level 2.

코딩테스트 연습 - 카펫 | 프로그래머스 스쿨 (programmers.co.kr)

문제

(생략)

제한사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

입출력 예

brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

문제 해결 방안

1. yellow의 약수를 구한다

2. yello의 약수로 brown 값과 일치하는 것을 찾는다.

소스 코드

import java.util.*;
class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        Queue<Node> q = new LinkedList<>();
        for(int i=1; i*i<=yellow; i++) {
            if(yellow%i==0) {
                q.add(new Node(yellow/i, i));
            }
        }
        
        brown-=4;
        while(!q.isEmpty()) {
            Node n = q.poll();
            if(brown == (n.x + n.y)*2) {
                answer[0] = n.x+2;
                answer[1] = n.y+2;
                break;
            }
        }
        
        return answer;
    }
    public class Node {
        int x, y;
        Node(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}