https://school.programmers.co.kr/learn/courses/30/lessons/42842
0. Headers
#include <vector>
using namespace std;
1. 알고리즘
1.1 First Algorithm
- 가로, 세로에서 양쪽 맨 끝의 값을 빼고 곱하게 될 경우 노란색과 값이 같게 됨
- 따라서 모든 값을 탐색하되 카펫이 가로 세로를 곱한 값이 넘어가는 경우 제외
vector<int> solution(int brown, int yellow) {
int width = 3;
while (true)
{
for (int height = 3; height <= width; height++)
if (brown + yellow >= (width) * (height))
if ((width - 2) * (height - 2) == yellow) return {width, height};
width++;
}
}
1.2 Second Algorithm
- 위의 방법으로 했으나 제출할 때 오류가 생겨 생각해봄
- 값이 같은데 카펫의 개수보다 작은 경우에 해당하는 값이 생김
- 10, 10 인경우 (5,4)을 넘기고 (6,4)를 리턴함 (아시는분?????????)
- 따라서 같은 값인 경우만 조건을 생성
vector<int> solution(int brown, int yellow) {
int width = 3;
while (true)
{
for (int height = 3; height <= width; height++)
if (brown + yellow == (width) * (height))
if ((width - 2) * (height - 2) == yellow) return {width, height};
width++;
}
}
2. 완성 코드
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow) {
int width = 3;
while (true)
{
for (int height = 3; height <= width; height++)
if (brown + yellow == (width) * (height))
if ((width - 2) * (height - 2) == yellow) return {width, height};
width++;
}
}
'C++ Algorithm & Study > C++ & Algorithm Strategies' 카테고리의 다른 글
[Programmers] 멀리 뛰기 (0) | 2023.01.24 |
---|---|
[Programmers] 행렬의 곱셈 (0) | 2023.01.23 |
[Programmers] 구명보트 (0) | 2023.01.17 |
[Programmers] 이상한 문자 만들기 (0) | 2023.01.16 |
[Programmers] 예상 대진표 (0) | 2023.01.10 |