본문 바로가기
알고리즘

[프로그래머스] 완전탐색, 규칙찾기

by 순원이 2024. 2. 23.

문제

 

프로그래머스

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

programmers.co.kr

 

 

배운 점

완전탐색 문제를 선택해서 완전탐색 문제인지는 알고있었다. 그래도 처음 봤다고 생각하고 이 문제를 어떻게 풀지 생각했다.

  1. 규칙 찾기 시도
    1. yellow가 24개이고 24x1 줄 일때 브라운은 26+26+1+1= 54 개이다
    2. yellow가 24개이고 12x2 줄 일때 브라운은 14+14+2+2= 30 개이다
    3. yellow가 24개이고 8x3  줄 일때 브라운은 10+10+3+3 = 26 개이다
    4. yellow가 24개이고 6x4 줄 일때 브라운은 8+8+4+4 = 24개이다
  2. 공식이 보인다.
    1. (엘로우 가로+ 2 + 옐로우 세로)*2가 브라운의 개수이다.
    2. 옐로우가로는 옐로우세로가 +1 할 때마다 전체 개수에서 나눠 준 값이다. 
  3. 옐로우 세로 +1 하며 탐색하면 되겠다.

처음 코드

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int value = 0;
        int width =0;
        int height = 0;
        while(value != brown){
            width++;
            height = yellow/width;
            value = (height+2+width)*2;
            if (value == brown){
                answer[0] =(height+2);
                answer[1] = (width+2);
            }
        }
        return answer;
    }
}

테스트 케이스 6개 성공 4 개 실패

이유: 옐로우가 3x3인 경우 while문을 돌다 width가 2인경우height는 소수이다. int로 선언되어 있기 때문에 실패

 

정답 코드

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int value = 0;
        int width =0;
        int height = 0;
        while(value != brown){
            width++;
                if(yellow%width == 0){
                height = yellow/width;
                value = (height+2+width)*2;
                if (value == brown){
                    answer[0] =(height+2);
                    answer[1] = (width+2);
                }
            }
        }
        return answer;
    }
}