📝 문제

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으로 풀어냈던 기억을 되짚을 겸 그대로 풀어봤다. 😙

댓글남기기