본문 바로가기
코딩일기/알고리즘

[프로그래머스 : 레벨 2] 카펫 (java)

by 욱파이어니어 2021. 6. 8.
728x90
반응형

이번문제는 문제를 보고 어떻게하지 생각했으나 곰곰히 생각해보니 답이 나오는 문제였다.

문제가 생각보다 쉬워서 레벨2가 아닌거 같다는 생각이 들 정도다.

 

 

문제 설명

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]

 

 

나는 이 문제를 그려보면서 생각해보니 가로와 세로의 길이를 결정짓는건 노란색의 길이라는것을 알게 되었다.

그래서 알게된 규칙은 아래와 같다.

 

1. yellow% 변수 == 0 이면 해당 수로 가로세로가 구해진다. 

2. 구해진 가로세로에 +2를 해주고 곱한다. (가로+2) * (세로+2)

3. 곱한수 - yellow 했을때 나오는 수가 brown과 같다면 그 가로 세로가 정답이다.

 

위내용을 소스로 보면 아래와 같다.

 

import java.util.Arrays;

public class PreTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		PreTest p = new PreTest();
		int yellow = 2;
		int brown = 10;
		System.out.println(Arrays.toString(p.solution(brown,yellow)));
		
	}
	
    public int[] solution(int brown, int yellow) {
        int[] answer = {};
        answer = new int[2];
        //이건 어떻게 접근해야하냐
        //1. 이건 노란색의 수를 일일히 나눠보고 이를 가지고 해야한다.
        for(int i = 1; i<=yellow; i++) {
        	System.out.println("i = "+ i);
        	if(yellow%i == 0) { //i로 나눴을때 나눠 떨어지면 진입
        		int width = i+2;
        		System.out.println("가로 : "+width);
        		
        		int height = (yellow/i) + 2;
        		System.out.println("세로 : "+ height);
        		
        		int area = width * height;
        		System.out.println("넓이 : " + area);
        		
        		int result = area - yellow;
        		System.out.println("갈색 개수 : "+ result);
        		
        		if(result== brown) {
        			if(height > width) {
        				int temp = height;
        				height = width;
        				width = temp;
        			}
        			answer[0] = width;
        			answer[1] = height;
        			System.out.println("가로 : "+ width + " 세로 : "+ height);
        			break;
        		}
        	}
        }
        return answer;
    }
}

 

느낀점

1. 문제를 곰곰히 보고 규칙을 찾아내려고 해보자.

2. 변수 % 0 은 에러가 난다.

반응형