본문 바로가기
Algorithm

[프로그래머스] 42842번 카펫 C++

by SoyeonCha 2024. 11. 13.

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42842?language=cpp

 

메모

- sqrt()

  https://blockdmask.tistory.com/307

 

[C언어/C++] pow, sqrt 함수에 대해서(루트함수, 제곱, 제곱근)

안녕하세요. BlockDMask 입니다 오늘은 (저는) 자주 쓰지는 않지만 꼭 알아둬야하는 함수를 두개 묶어서 가지고왔습니다. 바로 pow, sqrt 함수인데요. 중학교때 제곱과 제곱근(루트) 배우셨죠? 그걸이

blockdmask.tistory.com

 

풀이

- yellow의 세로 길이를 i로 하는 for문. yellow를 i로 나누어 떨어지는 경우 i와 yellow/i가 노란색 부분의 세로, 가로 길이가 될 수 있다는 것. 세로의 길이는 가로의 길이보다 작거나 같으므로 for문이 i<=sqrt(yellow)인 경우에만 수행되도록 함.

- (yellow의 가로+2)* (yellow의 세로+2) = 카펫의 전체 넓이 = yellow + brown

  i가 위 조건을 만족하는 경우가 문제에서 원하는 답이므로 if문 써서 답 구하기

 

맞힌 코드

#include <bits/stdc++.h>

using namespace std;

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