[프로그래머스] 카펫_JAVA
2022. 2. 22. 15:32ㆍ알고리즘/프로그래머스
반응형
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42842
yellow와 brown의 타일 개수가 주어진 후, 가로 세로를 구하는 문제이다.
- 갈색 타일은 항상 테두리 1줄만 노란색 타일을 감싸고 있다.
- 중앙의 노란색 타일은 항상 사각형이다.
- 늘 가로가 세로보다 길거나 같다.
해당 조건을 생각해 보았을 때, 필자는 하나의 공식을 세울 수 있었다.
(타일의 가로 * 세로) - (yellow 가로 * 세로) = brown 타일 개수
현재 우리에겐 brwon타일 개수, yellow의 타일 개수가 주어졌다.
아래 사진과 같이 전체 타일의 가로와 세로는 yellow 타일의 가로, 세로 + 2 임을 알 수 있으므로 공식에 필요한 변수가 성립한다!
1. yellow 수에 대한 약수를 구한다. (사각형이므로 yellow의 가로, 세로 후보를 구할 수 있다)
2. 구한 한 쌍의 약수에 각각 +2를 더한다. 해당 값은 각각 타일의 가로, 세로가 된다.
3. 위의 공식 기준으로 (타일의 가로 * 세로) - (yellow 가로 * 세로) = brown타일 개수가 성립하는지 확인한다.
4-1. 성립할 경우 해당 공식의 타일 가로, 세로값을 return
4-2. 성립하지 않을 경우 yellow의 다음 약수를 구해 2~3을 반복한다.
import java.util.Arrays;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = {0, 0};
for (int i = 1; i * i <= yellow; i++) {
if (yellow % i == 0) {
answer[0] = yellow / i + 2; //가로가 세로보다 커야 하므로
answer[1] = i + 2;
if (answer[0] * answer[1] - i * yellow / i == brown)
return (answer);
}
}
return answer;
}
}
공식만 찾으면 아주 easy한 문제!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 조이스틱_JAVA (1) | 2022.02.28 |
---|---|
[프로그래머스] 체육복_JAVA (0) | 2022.02.28 |
[프로그래머스] 모의고사_JAVA (0) | 2022.02.22 |
[프로그래머스] H-index_JAVA (0) | 2022.02.22 |
[프로그래머스] 가장 큰 수_JAVA (0) | 2022.02.22 |