본문 바로가기
문제풀이/Programmers 문제풀이

[ 알고리즘 ] 코딩 - Programmers - 카펫.java

by 마늘아빠 2021. 1. 21.
728x90
반응형

문제 링크

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr


* 프로그래머스 - Level 2 - (자바)카펫 - 완전탐색

입 출력 예시


< 로직 >

* 갈색과 노란색으로 만들 수 있는 최대 크기를 구한다

* 일단 전체 카펫이 노란색으로 정해져있다고 생각한다

* 반복문을 돌며 카펫의 가로/세로 크기를 변경한다

* 현재 가로/세로의 크기에서 테두리 전체만 갈색으로 칠할 수 있는지 파악한다

* 전체 테두리를 갈색으로 칠했을 때 주어진 갈색과 같은 수가 나온다면

* 그 가로/세로가 정답

그림 예시

* 위와 같은 그림일 경우

* 가로 : 4 / 세로 : 3

* 테두리 : 4*2 + 3*2 - 4 = 10


class Solution {
	    public int[] solution(int brown, int yellow) {
	    	int size = brown + yellow; // 카펫의 전체 크기
	    	
	    	int[] answer = new int[2];
	    	
	    	for(int i = 3; i < size; i++) { // 1,2 크기는 보지 않는다.
	    		int width = i; // 가로길이를 변경해가며 카펫 크기 유추
	    		int height = size / i; // 카펫의 세로길이
	    		
	    		if(width < height) continue; // 가로가 짧은 경우는 보지 않는다
	    		
	    		// 카펫 전체가 노란색으로 지정되어 있고
	    		// 테두리만 갈색으로 칠하는 경우라고 생각
	    		// 간단한 수식으로 구할 수 있다
	    		// 중복 값이 4군데 있으므로 -4 해주자
	    		int sum = width*2 + height*2 - 4; 
	    		
	    		if(sum == brown) { // 테두리의 계산값이 갈색의 총 수와 같으면 정답
	    			answer[0] = width;
	    			answer[1] = height;
	    			break;
	    		}
	    	}
	    	
	        return answer;
	    }
	}
반응형