728x90
반응형
문제 링크
programmers.co.kr/learn/courses/30/lessons/42842
* 프로그래머스 - 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;
}
}
반응형
'문제풀이 > Programmers 문제풀이' 카테고리의 다른 글
[ 알고리즘 ] 코딩 - Programmers - 행렬의 곱셈.java (1) | 2021.01.23 |
---|---|
[ 알고리즘 ] 코딩 - Programmers - 소수찾기.java (0) | 2021.01.22 |
[ 알고리즘 ] 코딩 - Programmers - 이중우선순위큐.java (0) | 2021.01.20 |
[ 알고리즘 ] 코딩 - Programmers - H-index.java (2) | 2021.01.20 |
[ 알고리즘 ] 코딩 - Programmers - 위장.java (0) | 2021.01.15 |