알고리즘
프로그래머스 카펫 (JAVA)
박카스마시며코딩
2022. 9. 12. 19:40
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
저는 수학식을 정리하고 완전탐색을 통해 문제를 해결하였습니다.
먼저 세로를 n, 가로를 m이라 한다면,
brown = 2*n + 2*m - 4
yellow = n*m - 2*n - 2*m + 4 => yellow = n*m - (2*n + 2*m - 4)
yellow + brown = n*m
이라는 식으로 정리할 수 있습니다.
저는 완탐을 돌면서 첫번째 식과 세번째 식에 맞는지를 확인하고 맞다면 그 값을 리턴하도록 구현하였습니다.
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = cal(brown,yellow);
return answer;
}
private static final int INF = 987654321;
private static int[] cal(int brown, int yellow){
int sum = brown + yellow;
for(int i = 3 ; i < INF; i++){
for(int j = i ; j < INF; j++){
int mul = i*j;
if(mul == sum && 2 * i + 2 * j - 4 == brown ){
return new int[] {j,i};
}else if(mul > sum || mul < 0){
break;
}
}
}
return new int[] {0,0};
}
}