티스토리 뷰

수리문제?
카펫의 가로길이:w 세로길이:h , 갈색타일의 수:b 노란색타일의 수:y 라고 두면 수식을 이렇게 짤 수 있다.
B = 4+2(w-2)+2(h-2)
Y = (w-2)(h-2)
여기서 미지수는 w, h니까 미지수 위주로 정리해보면
W+h = (b+4)/2
W*h = y+2(x+y)-4
이차방정식의 해로 구해도 되지만 가로 세로길이는 자연수이기 떄문에 하나씩 체크해도 괜찮다.
여기서, 세로길이가 가로길이보다 작거나 같다는 조건이 있기 때문에, 세로길이를 1로 두고, 세로가로의 합의 반보다 작거나 같을때까지만 반복문을 돌려서 체크해주면 된다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    int sum_xy = (brown+4)/2;
    int multiple_xy = yellow+2*sum_xy-4;
    
    for(int h = 1; h <= sum_xy/2; h++) {
        int w = sum_xy - h;
        if(multiple_xy == w*h) {
            answer.push_back(w);
            answer.push_back(h);
            break;
        }
    }
    return answer;
}


다른사람의 풀이
막 신박한건 안보이는듯?

'■ 알고리즘 > ◻ Programmers' 카테고리의 다른 글

[C++] 타겟 넘버  (0) 2022.11.15
[C++] 피로도  (0) 2022.11.15
[C++]베스트 앨범  (0) 2022.11.14
[C++]소수 찾기  (0) 2022.11.11
[C++] 모의고사  (0) 2022.11.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함