https://school.programmers.co.kr/learn/courses/30/lessons/42842
이 문제는 카펫의 가로 세로의 길이를 구하는 문제이다.
갈색과 노란색으로 이루어진 카펫의 무늬의 개수를 힌트로 사용해 문제를 해결해야한다.
테스트 케이스를 살펴보면 카펫의 가로 세로의 길이는 갈색과 노란색 무늬의 총합과 관련이 있는 것을 알 수 있다.
따라서 처음 brown + yellow를 통해 total을 구한다.
이후 brown의 최소 크기인 8과 yellow의 최소 크기인 1을 통해 반복을 3부터 시작하는 것을 유추한다.
total 값이 i와 나누어 떨어진 경우
total을 i와 나누어 x값(가로)을 구한다.
이후, 세로 값인 i와 가로값인 num을 2씩 뺀 후 곱한 값이 yellow인 경우 정답으로 처리한다.
왜 2씩 뺀 후 곱해야하는가
(18,6) 이 주어진 값일 때, solution=[8,3]이 나와야한다.
B B B B B B B B
B Y Y Y Y Y Y B
B B B B B B B B
2중 루프(loop)를 돌린다면 width=6, height=4 에서 멈추게 될 것
멈추는 이유는 ( width*height == brown+yellow )를 했을거기 때문
여기서 문제는 solution=[6,4]는 brown=16, yellow=8 입니다.
즉 주어진 파라미터와 맞지 않는 문제가 발생한다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer;
int total = brown + yellow;
for(int i = 3;i<=total;i++){
if(total % i == 0){
int num = total/i;
if((i - 2) * (num - 2) == yellow){
answer.push_back(num);
answer.push_back(i);
break;
}
}
}
return answer;
}
'Programmers Review' 카테고리의 다른 글
[Lv 2] 더 맵게 (0) | 2024.06.28 |
---|---|
[Lv 2] H-Index (0) | 2024.06.28 |
[Lv 2] 숫자 블록 (0) | 2024.06.27 |
[Lv 2] 땅따먹기 (0) | 2024.06.24 |
[Lv 2] JadenCase 문자열 만들기 (0) | 2024.06.23 |