728x90
고득점Kit > 완전탐색 > 카펫
※ 주의 : 문제풀이 방법은 다양합니다. 참고만 해주세요 ※
[문제설명]
더보기
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
[간단설명]
갈색, 노란색 카펫 개수를 유추해서 전체 카펫의 넓이를 구하고, 가로, 세로 길이를 리턴하는 문제
[접근방법]
1. 전체 넓이를 구한다.
2. 가로, 세로 길이의 최소값, 최대값을 지정한다.
3. 문제의 조건을 만족하는 가로, 세로 길이를 찾는다.
1) 전체 넓이 = 가로 x 세로
2) 노란색 넓이 = (가로-2) x (세로 -2)
3) 가로 >= 세로
[주의사항]
1. 문제를 잘 읽고, 갈색이 노란색을 1칸씩 감싸는 내용을 이해헤야한다.
2. 문제의 조건을 모두 만족시켜야 한다.(특히, 노란색 넓이)
[소스공개]
class Solution {
public int[] solution(int brown, int yellow) {
// 정답 배열
int[] answer = new int[2];
// 넓이 = 갈색 + 노란색
int area = brown+yellow;
// 가로, 세로 최소값(3)
// ex) 가로 : 노란색 최소값 1 이면, 갈색은 양옆 2 필요(1+2=3)
// ex) 세로 : 노란색 최소값 1 이면, 갈색은 위아래 2 필요(1+2=3)
int start = 3;
// 가로, 세로 최대값(넓이/3)
// ex) 가로, 세로 최소값 3부터 시작이기 때문에,
// ex) 최대값은 (넓이/3) 까지만 탐색하면 됨.
int end = area/3;
// 완전 탐색
for(int w=start;w<=end;w++){
for(int h=start;h<=end;h++){
// 1) 넓이가 w*h 이면서
// 2) 위아래, 양옆 가장자리를 뺀 넓이가 노란색이면서
// 3) 가로가, 세로보다 크거나 같으면
if((w*h==area) && ((w-2)*(h-2)==yellow) && w>=h){
answer[0]=w;
answer[1]=h;
return answer;
}
}
}
return answer;
}
}
[실행결과]
728x90
'코딩 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JAVA] 고득점Kit > 스택/큐 > 같은 숫자는 싫어 (by 다알쥐AI) (0) | 2024.09.27 |
---|---|
[프로그래머스/JAVA] 고득점Kit > 완전탐색 > 피로도 (by 다알쥐AI) (2) | 2024.09.13 |
[프로그래머스/JAVA] 고득점Kit > 완전탐색 > 소수 찾기 (by 다알쥐AI) (0) | 2024.09.11 |
[프로그래머스/JAVA] 고득점Kit > 완전탐색 > 모의고사 (by 다알쥐AI) (0) | 2024.09.10 |
[프로그래머스/JAVA] 고득점Kit > 완전탐색 > 최소직사각형 (by 다알쥐AI) (0) | 2024.09.09 |