보안 / 개발 챌린저가 목표

[AlphaGo Study] [Programmers] [JAVA] 카펫 본문

Development/Algorithm

[AlphaGo Study] [Programmers] [JAVA] 카펫

햄미은서 2020. 11. 14. 02:49

 

문제 설명

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

 Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

 Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 사항

👉 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.

👉 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.

👉 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

입출력 예

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

 

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr


문제를 풀기 전 THINK

 💡 가로 = row / 세로 = col

 💡 area(넓이) = 가로 * 세로 = brown + yellow

 💡 perimeter(둘레) = 가로 + 세로 = (brown + 4) / 2

    ► brown = (가로 * 2) + (세로 - 2) * 2 에서 바꾸면 위의 식이 도출됨

나의 Solution

public class Carpet {
	public int[] solution(int brown, int yellow) {
        int[] answer = {0, 0};
        int area = brown + yellow; // 가로(row) * 세로(col)
        int perimeter = (brown + 4) / 2; // 가로(row) + 세로(col)
        
        for(int col = 1; col < area; col++) {
        	int row = area / col;
        	
        	if(row * col == area) { // i*j가 area이면 배수 이므로
        		if(row + col == perimeter) {
            		answer[0] = row;
            		answer[1] = col;
            		break;
            		}
        	}
        }
        return answer;
    }
}
Comments