c++ 코테/문제 풀기

프로그래머스 지폐접기 - 340199

케케_ 2024. 12. 3. 18:10

https://school.programmers.co.kr/learn/courses/30/lessons/340199

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

내코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(vector<int> wallet, vector<int> bill) {
    int answer = 0;
    int bill_min, bill_max, w_min, w_max;

    if (wallet[0] > wallet[1]){
        w_max = wallet[0];
        w_min = wallet[1];
    } else {
        w_max = wallet[1];
        w_min = wallet[0];
    }

    while(1) {
        if (bill[0] > bill[1]){
            bill_max = bill[0];
            bill_min = bill[1];
            bill[0] /= 2;
        } else {
            bill_max = bill[1];
            bill_min = bill[0];
            bill[1] /= 2;
        }

        if (bill_min <= w_min && bill_max <=w_max)  {
            break;
        };
        answer++;
    }
    
    return answer;
}
int main() {
    vector<int> wallet = {50,50};
    vector<int> bill = {100,241};
    int answer = solution(wallet, bill);
    cout << "answer : " << answer <<endl;
    
    return 0;
}

 

 

지피티 코드

#include <string>
#include <vector>
#include <iostream>
#include <algorithm> // std::min, std::max 사용

using namespace std;

int solution(vector<int> wallet, vector<int> bill) {
    int answer = 0;

    // wallet과 bill의 최소값과 최대값을 한 번에 계산
    int w_min = min(wallet[0], wallet[1]);
    int w_max = max(wallet[0], wallet[1]);
    int bill_min = min(bill[0], bill[1]);
    int bill_max = max(bill[0], bill[1]);

    // 조건을 만족할 때까지 반복
    while (bill_min > w_min || bill_max > w_max) {
        // 더 큰 값을 나눔
        if (bill_max == bill[0]) {
            bill[0] /= 2;
        } else {
            bill[1] /= 2;
        }

        // 나눈 후 다시 최소값, 최대값 계산
        bill_min = min(bill[0], bill[1]);
        bill_max = max(bill[0], bill[1]);

        answer++;
    }

    return answer;
}

int main() {
    vector<int> wallet = {50, 50};
    vector<int> bill = {100, 241};
    int answer = solution(wallet, bill);
    cout << "answer : " << answer << endl;

    return 0;
}
  • 나는 최소 변수를 따로 만들면 어떻게 본 벡터의 값을 바꿀까 했는데,
    • bill_max == bill[0] 이런 방법을 쓰면 된다는 걸 깨달았다

 

'c++ 코테 > 문제 풀기' 카테고리의 다른 글

프로그래머스 최댓값과 최솟값 - 12939  (0) 2024.12.04