-
[C++] 프로그래머스 카펫알고리즘/프로그래머스 2022. 12. 30. 16:31반응형12345678910111213141516171819202122232425262728293031323334#include <string>#include <vector>#include <cmath>using namespace std;vector<int> solution(int brown, int yellow) {vector<int> answer;int tmp = (int)sqrt(yellow);int w,h;for(int i=1; i<=tmp; i++) {if(yellow % i == 0) {w = i;h = yellow / i;int b_tmp = w * 2 + h * 2 + 4;if(b_tmp == brown) {if(w > h) {answer.push_back(w+2);answer.push_back(h+2);}else {answer.push_back(h+2);answer.push_back(w+2);}break;}}}return answer;}
cs 문제 조건이 그닥 친절하지 않아서 애먹은 문제
1. 노란색 카펫은 무조건 사각형을 이룬다.
2. 노란색 카펫은 서로 떨어져있지 않다.
위와같은 두개의 조건이 추가되어야 하는데 누락됐다.
** 알고리즘
만약 yellow 가 12라고 가정하면 네가지 경우의 수가 생긴다
yy yyyyyy yyyy yyy
yy yyyyyy yyyy yyy
yy yyyy yyy
yy yyy
yy
yy
이제 갈색 카펫의 숫자를 추론해보자
O bb O
b yy b
b yy b
b yy b
b yy b
b yy b
b yy b
O bb O
노란색 카펫의 가로 x2 + 세로 x2 + O 네칸 과 같은 공식이 설정된다.
위의 공식을 이용해 노란색 카펫의 가능한 모든 경우의 수를 탐색 해 갈색 카펫의 수와 같다면 결과 값으로 추가하면 된다.
728x90반응형'알고리즘 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 단어 변환 (0) 2023.01.03 [C++] 프로그래머스 네트워크 (0) 2023.01.01 [C++] 프로그래머스 섬 연결하기 (0) 2022.12.28 [C++] 프로그래머스 큰 수 만들기 (0) 2022.12.27 [C++] 프로그래머스 베스트앨범 (0) 2022.12.26