📝 문제
https://programmers.co.kr/learn/courses/30/lessons/42842?language=java
🎯 풀이
전체 카펫(사각형)의 넓이를 생각하고 접근해야 brown 개수에도 알맞는 정답이 나온다.
문제에서 구해야하는 가로, 세로 길이의 합은 (brown+4)/2 로 구할 수 있다.
더해지는 4는 모서리 4개다.
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int x_plus_y = (brown+4)/2;
if(x_plus_y % 2 == 0){ // 절반으로 나눠진다면,
answer[0] = x_plus_y / 2;
answer[1] = x_plus_y / 2;
} else { // 나눠지지 않는다면 가로를 더 길게.
answer[0] = x_plus_y / 2 + 1;
answer[1] = x_plus_y / 2;
}
for(int i = 0; i < x_plus_y; i++){
// 가로*세로 결과값이 블록 총합수와 같다면 정답.
if(answer[0]*answer[1] == brown+yellow) break;
// 아니면 가로를 늘리고 세로를 줄여서 반복한다.
answer[0]++;
answer[1]--;
}
return answer;
}
}
근의공식을 이용한 풀이가 유명한 문제지만,
Python으로 풀어냈던 기억을 되짚을 겸 그대로 풀어봤다. 😙
댓글남기기