[완전탐색] 카펫

서은경·2022년 5월 15일
0

CodingTest

목록 보기
16/71
public static int[] solution(int brown, int yellow) {
        int[] answer = {};

        HashMap<Integer, Integer> hm = new HashMap<>();

        for (int i = 1; i <= yellow; i++) {
            if (yellow % i == 0) {
                hm.put(i, yellow / i);
            }
        }

        int total = brown+yellow;
        int brownSide = (total-4-yellow)/2;     // 전체 타일 갯수 - 모서리 4개 - 노란색 갯수

        int width = 0;
        int height = 0;

        for (int i : hm.keySet()) {
            int sum = i + hm.get(i);

            if(sum == brownSide) {
                System.out.println(i);
                if (i < hm.get(i)) {
                    width = hm.get(i);
                    height = i;
                } else {
                    width = i;
                    height = hm.get(i);
                }
            }
        }

        width += 2;
        height += 2;

        answer = new int[]{width, height};

        return answer;
    }

조금 쉽다고 생각하고 풀었는데 다른 사람 풀이 너무 간단해서 기절할 뻔했다
나는 일단 전체타일에서 노란타일과 모서리 네개를 빼주고 2로 나눠 갈색 타일에 필요한 총 갯수를 구했다. 해쉬맵에 노란 타일의 약수를 키 밸류 형태로 담아 갈색 타일에 필요한 총 갯수와 일치하는 값을 찾았고 처음 빼뒀던 모서리 두개씩 더해 구했다

단 네줄만으로 끝난 코드도 첨부..!

public int[] solution(int brown, int red) {
        int a = (brown+4)/2;
        int b = red+2*a-4;
        int[] answer = {(int)(a+Math.sqrt(a*a-4*b))/2,(int)(a-Math.sqrt(a*a-4*b))/2};
        return answer;
    }

0개의 댓글

관련 채용 정보