알고리즘/프로그래머스 Level2

[프로그래머스,Java] Level2: 카펫

류창 2021. 12. 18. 20:00
반응형

 

 

문제분석

 

brown 과 yellow의 블록갯수를 주어집니다.

 

brown은 테두리 색깔이고, yellow는 테두리를 제외한 내부의 색깔입니다.

 

 

목표:  카펫의 행과 열의 갯수 구해주기

 

 

우선 전체 블록갯수를 구할수있습니다. brown+yellow 로 구할수있죠.

 

카펫의 전체블록갯수는  행X열로 구할수있습니다.

 

행, 열을 구하려면 전체블록수/행의갯수 = 열의갯수 가 가능한부분을 모두 구하자.

 

여기서 전체블록수%행의갯수가 0이 아닌경우는 모두 빼야한다. (실수인값은 모두 제외해야함)

 

이렇게 모인 행,열 가능한 후보자들을 모두 모아 내부갯수가 yellow와 일치한지구한다.

 

카펫의 테두리를제외한 내부의 갯수는 (행-2)*(열-2)값으로  자동적으로 구해진다.

 

문제풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.*;
class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = {};
        int blocks = brown+yellow;
        List<int[]> candidate = new LinkedList<>();
        
        for(int i=3;i<=Math.sqrt(blocks);i++){
            if(blocks%i==0){
                candidate.add(new int[]{blocks/i,i});
            }
        }
        
        for(int[] data:candidate){
            if((data[0]-2)*(data[1]-2)==yellow){
                answer=data;
                break;
            }
        }
        return answer;
    }
}
cs
반응형