programmers.co.kr/learn/courses/30/lessons/42842
노란색, 갈색으로 이뤄진 격자 모양의 카펫이 있다.
이 카펫의 노란색, 갈색 격자 개수가 주어질 때 카펫의 가로, 세로 크기를 배열에 담아 반환해야한다.
1. 카펫의 테두리는 모두 갈색 한 줄로 둘러싸여있고 나머지는 전부 노란색이다.
2. 가로 길이는 세로 길이와 같거다 더 길다.
3. 노란색 격자는 최소 1칸은 존재한다.
풀이 .
class Solution {
public int[] solution(int brown, int yellow) {
// b = 2w + 2h - 4
// -> w + h = (b + 4) / 2
// -> h < (b + 4) / 2
// y = (w - 2) * (h - 2)
int[] answer = new int[2];
for(int h = 3; h < (brown + 4) / 2; h++) { // y는 최소 1칸 -> h는 최소 3이상
int w = (brown + 4) / 2 - h;
if(yellow == (w - 2) * (h - 2)) {
answer[0] = w;
answer[1] = h;
break;
}
}
return answer;
}
}
다른 블로그의 코드를 찾아보고 이해했다.
카펫의 형태를 유추하여 몇가지 식을 세울 수 있다.
가로는 세로보다 짧을 수 없다는 조건이 있기 때문에 h를 최소값부터 탐색하다 처음 나오는 w 값이 정답이 된다.
(w, h 값을 역전시키면 yellow에 대한 식은 맞지만 세로가 더 길어지므로 정답이 될 수 없음)
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
[PG] 조이스틱 JAVA (0) | 2021.01.02 |
---|---|
[PG] 체육복 JAVA (0) | 2021.01.02 |
[PG] 소수 찾기 JAVA (0) | 2021.01.01 |
[PG] 모의고사 JAVA (0) | 2021.01.01 |
[PG] 가장 큰 수 JAVA (0) | 2020.12.31 |