문제 링크 : 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;
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] 86491번 최소직사각형 C++ (0) | 2024.11.13 |
---|---|
[프로그래머스] 42747번 H-Index C++ (0) | 2024.11.13 |
[프로그래머스] 42748번 K번째수 C++ (0) | 2024.11.12 |
[프로그래머스] 1844번 게임 맵 최단거리 C++ (0) | 2024.11.11 |
[백준/BOJ] 20125번 쿠키의 신체 측정 C++ (0) | 2024.11.07 |