조앤의 기술블로그

[프로그래머스 / 완전탐색] 카펫 (c++, java) 본문

Programming/프로그래머스

[프로그래머스 / 완전탐색] 카펫 (c++, java)

쬬앤 2020. 3. 22. 18:14

[문제]

문제 설명

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 빨간색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 빨간색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 빨간색 격자의 수 red가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 빨간색 격자의 수 red는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

입출력 예

brownredreturn

10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

출처

※ 공지 - 2020년 2월 3일 테스트케이스가 추가되었습니다.

 

[c++ 코드]

// 문제가 개편 되었습니다. 이로 인해 함수 구성이 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
#include <string>
#include <vector>
#include <algorithm> //next_permuatation
using namespace std;

int brownNum(int a, int b){
    //red의 가로 * 세로 수를 인자로 넣었을 때(그 때 경우의)
    //brown개수 (이 경우가 제시된 brown과 일치하는지 비교)
    return (a+2)*2 + (b*2);
}

vector<int> solution(int brown, int red) {
    vector<int> answer;
    
    
    for(int i=1; i*i <=red; i++){
        if(red % i == 0){
            if(brown == brownNum(i, red/i)){
                answer.push_back((red/i)+2);
                answer.push_back(i+2);
            }
        }
    }
    
    
    return answer;
}

 

[java 코드]

class Solution {
    static int brownNum(int a, int b){
        // a = red의 가로, b = red의 세로
        // 일 때 brown 벽돌의 개수 계산
        return (a + 2) * 2 + b * 2;
    }
    public int[] solution(int brown, int red) {
        int[] answer = new int[2];
        
        for(int i = 1; i*i <= red; i++){
            if(red % i == 0){
                 if(brown == brownNum(i, red / i)){
                    answer[1] = i+2;
                    answer[0] = red/i + 2;
                }
            }
           
        }
        
        return answer;
    }
}

 

[문제링크]

https://programmers.co.kr/learn/courses/30/parts/12230

 

프로그래머스

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

programmers.co.kr