Algorithm
[프로그래머스] 42842번 카펫 C++
SoyeonCha
2024. 11. 13. 13:39
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42842?language=cpp
메모
- sqrt()
https://blockdmask.tistory.com/307
풀이
- 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;
}