ALGORITHM/프로그래머스 | 백준 | 삼성 | 카카오

[프로그래머스] 카펫

SZCODE 2021. 3. 16. 16:27

programmers.co.kr/learn/courses/30/lessons/42842

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

문제 설명 : 카펫의 가로 길이와 세로길이 구하기

 

문제 풀이 : 

노란 격자의 약수를 확인하면서 구했습니다.

예를 들어 brown 가 24고 yellow가 24일 때, x를 증가시키면서 노란격자의 수와 나누어떨어지면 brown 개수인지 확인하였습니다.

 

x    y    temp

1   24    54

2   12    32

3    8    26

4    6    24 -> brown 의 개수와 같기 때문에 각각 변의 길이는 x+2, y+2 입니다. 이 중 더 크거나 같은 숫자가 카펫의 가로길이가 되고 나머지는 세로길이입니다.

class Solution {
    public static int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int x = 0, y = 0;//카펫 각각의 길이
  
        while(x != yellow) { // x가 노란 격자의 수 보다 작을 때까지만
        	x++;
        	y = yellow/x;  
        	
        	if(yellow %x == 0) {//x가 약수라면
        		int temp = (y+2) *2 + (x*2);//x와 y를 감싸는 갯수를 구한다
        		if(temp==brown) {// 감싸는 갯수가 brown의 개수가 같을 때
        		
        			if(x+2 == y+2) {
        				answer[0] = x+2;
        				answer[1] = y+2;
                       			break;
        			}
        			else{
        				answer[0] = Math.max(x+2, y+2);
        				answer[1] = Math.min(x+2, y+2);
        				break;
        			}
        		}
        	}
        }
        
        return answer;
    }
}