본문 바로가기

알고리즘

[알고리즘/Programmers] LV2. 카펫 (Java)

728x90
반응형

 

오늘의 학습 키워드

  • 완전 탐색

오늘의 회고

1. 문제

문제 URL

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 해결 방안

public static int[] solution(int brown, int yellow) {
    int answer[] = new int[2]; // 가로, 세로

    int sum = brown + yellow;

    for(int i=3; i<sum; i++) { // 세로 3 이상
        int j = sum / i; // i:세로, j:가로

        if((sum % i != 0) || (j < 3)) continue; // 가로 3 이하이면 해당 X

        // 옐로우 크기가 일치하면 리턴
        if(((j-2)*(i-2)) == yellow) {
            answer[0] = j;
            answer[1] = i;
            return answer;
        }
    }

    return answer;
}
  • 옐로우+갈색 합의 약수를 찾아 (가로,세로)로 나올 수 있는 값을 찾는다.
  • 옐로우가 최소 1칸이라면 가로, 세로 모두 3 이상이어야 한다. -> 가로, 세로 탐색 시 각 값이 3 이상이어야 한다
  • 옐로우는 중앙에 차지하고 갈색은 무조건 사이드 라인 1줄만 놓여져있다 -> 옐로우 크기를 수식화할 수 있다
  • 옐로우 크기를 수식화한 식과 옐로우 크기가 일치하면 리턴한다.

3. 피드백

  • 약수로 경우의 수까지 뽑았으나 그 뒤에 어떻게 해야할지 생각이 안났다. 가로,세로가 3 이상이어야 한다는 것, 옐로우 크기를 일치하면 리턴 하는 것을 캐치한다면 잘 풀 수 있는 문제 같다.
728x90
반응형