본문 바로가기

프로그래밍/알고리즘

프로그래머스 : 콜라 문제 _ C++

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#수학 #lv.1

 

회고

 

문제에서 요구하는 일반화 된 콜라 문제의 공식을 생각해내는 것은 오래 걸리지 않았다.

현재 콜라 개수 = 과거 갖고 있던 콜라 수 - 가게에 줄 빈병 수 + 가게에서 새로 받는 콜라 수

 

테스트 케이스는 통과했으나 정답은 실패하지 않아서 고민하다가 문제점을 찾지 못해 다른 테스트 케이스가 무엇이 있는지 알아보았고 그 결과, b를 고려하지 않았다는 것을 깨닫게 되었다.

따라서 기존의 receive = give / a 를 b로 곱해줘서 해결했다.

 

걸린 시간은 약 20분 정도로 빠르게 푼 문제였다

코드
/*
now = past - give + receive
give 계산 어떻게 ? -> a 최대공배수
receive 따로 저장
*/

#include <string>
#include <vector>
using namespace std;

int solution(int a, int b, int n) {
    int answer = 0;
    int now, past, give, receive;

    now = n;
    while (now >= a) {
        past = now;
        int q = now / a;
        give = q * a;
        receive = (give / a) * b;
        answer += receive;
        now = past - give + receive;
    }
    return answer;
}
Recent Posts
Popular Posts