[Programmers 알고리즘, C++]#Level 2_카펫
Programmers 알고리즘 문제 풀이, Level 2_카펫
순수 수학으로 푸는 문제
#1. 문제
#2. 풀이
1. 갈색 격자와 노란색 격자
- 최소 가로길이, 최소 세로 길이 : 카펫의 최대 가로 길이는 (갈색 격자 - 2)/2개이며, 최소 세로 길이는 3입니다.
- 공식 : 2(W+H)-4 = B 식을 통해 Y값을 도출합니다.
- 갈색 격자와 노란색 격자 : 위 내용들을 통해 가로 길이는 -1로 줄이고, 세로 길이는 +1로 늘리며, 차례대로 Y값을 도출하고, 주어진 Y값과 동일하면, 해당 가로길이와 세로 길이를 결과로 반환합니다.
#3. 코드
#include <string>
#include <vector>
using namespace std;
// #1. 카페트의 가로 최대 = (B-2)/2, 카페트의 세로 최소 = 3
// #2. B 값을 통해 Y값을 도출하고, 주어진 Y값과 같다면 W와 H값 반환.
// #3. W = 3 부터 시작, H = 3 부터 시작, 2(W + H) - 4 = B.
// #3. Y = (W-2)*(B-2).
vector<int> solution(int brown, int yellow) {
vector<int> answer;
int W = (brown - 2)/2;
int H = 3;
while(H <= W)
{
int cnt_yellow = (W-2)*(H-2);
if(cnt_yellow == yellow)
{
answer.push_back(W);
answer.push_back(H);
break;
}
H++;
W--;
}
return answer;
}
'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글
[Programmers]#Level3_이중 우선 큐, set, multiset (0) | 2023.11.23 |
---|---|
[Programmers]#Level3_정수 삼각형, DP, 동적 프로그래밍, 동적 계획법 (1) | 2023.11.23 |
[Programmers]#Level2_뒤에 있는 큰 수 찾기, 스택 (0) | 2023.09.23 |
[Programmers]#Level2_연속된 부분 수열의 합, 투 포인터 (1) | 2023.09.23 |
[Programmers]#Level2_요격 시스템, 정렬, 최대 중복 구간 (0) | 2023.09.23 |