본문 바로가기
코테준비/하루한개도전~

99클럽 코테 스터디 5일차 TIL : 완전탐색 - 카펫

by 움바둠바 2024. 5. 28.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42842

오늘문제는 조금 쉬웠다!

그냥 내가 노가다로 풀어서 쉽게푼거일수도 있지만,,,

테스트만 통과하면 됐다!!^^


노란색 모양이 정해지면 갈색타일의 모양도 자동으로 결정된다.

-> 노란색 모양을 바꾸면서, 그때의 갈색타일 개수가 맞는지를 확인하면 된다.

1. 노란색 타일의 세로길이를 index i 로 잡고, 1부터 시작한다 (for)

2. 만약 yellow % i 를 했는데 나머지가 존재하면, 해당 세로길이 (세로길이가 i일 때)로는 직사각형을 못만드므로, 다음 반복으로 넘어간다 (continue)

3. 노란색 타일의 가로길이 j를 구한다 (j = yellow / i)

4. 노란색 타일의 모양이 정해졌으므로, 이걸 기준으로 갈색타일의 예상개수를 구한다

    갈색 예상개수 = (노란색 가로 + 2) * 2 + (노란색 세로 * 2)

5. 이렇게 구한 갈색타일의 예상개수와, 주어진 갈색타일의 개수가 같다면 성공!! 반복을 멈춘다

5-a. 다르면, 반복을 계속한다.

#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    int i, j;
    
    for(i = 1; i <= yellow; i++ ){
        // i : 세로 (yellow)
        
        if((yellow % i) != 0){
            continue;
        }
        
        j = yellow / i;  // 가로 (yellow)
        
        int browns = (2*(j +2)) + (2*i);
            
        if(browns == brown){
            break;
        }
    }
    
    answer = {j+2, i+2};
    
    return answer;
}

졸프땜에 바빠서 지하철에서 냅다 폰으로 풀었는데

다행히 어렵지 않은 문제가 나와서 금방 풀었다!

완전탐색에 대한 내용은 나중에 다시 복습할 필요가 있어보이긴 한다....

뭐였는지 기억이 1도안나,,,

728x90