https://school.programmers.co.kr/learn/courses/30/lessons/132267
#수학 #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;
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그래머스 : 모의고사 _ C++ (0) | 2022.10.26 |
---|---|
프로그래머스 : 완주하지 못한 선수 _ C++ (0) | 2022.10.26 |
프로그래머스 : 올바른 괄호 _ C++ (0) | 2022.10.25 |
백준 3190 : 뱀 (삼성 SW 역량 테스트) _ C++ (0) | 2022.10.11 |
백준 1966 : 프린터 큐 _ C++ , +) 우선순위 큐 pair compare (0) | 2022.10.07 |