문제


문제 해석
1. 제한 사항에서 n이 1,000,000이고 a에 의해 나눠지므로 O(logN)이라 생각해서 반복문으로 풀기로 결정.
2. 콜라 새거 개수 n, 가져다 줘야하는 콜라 병 a, a개수를 가져다 주면 받는 콜라 병 b
3. a로 나눈 몫 * b를 answer에 더해준다.
4. 새거 개수 n의 갱신은 n을 a로 나눈 나머지 + a로 나눈 몫 * b로 갱신한다.
5. 3~4의 과정을 반복
코드
int solution(int a, int b, int n) {
int answer = 0;
// 콜라 새 거 개수 n
// 병 a개를 가져다 주면 새 거 b병을 준다.
int NewColar = 0;
while(n >= a)
{
// 받을 수 있는 병의 개수 answer
// 새로 받은 거는 다시 새 거에 추가된다.
// 1. 받을 수 있는 개수를 미리 구한다.
// 2. 새로 받은 것을 기록한다.(몫)
// 3. answer에 더해준다.
// 4. 전체 개수를 갱신한다. (2.의 나머지 + 몫)
// 5. 다시 이를 n이 이상일 동안 반복한다.
NewColar = n / a * b;
answer += NewColar;
n = (n % a) + NewColar;
}
return answer;
}
회고
마지막에 b를 고려하지 않아서 4분 정도 시간을 허비했는데 풀이 전에 어떻게 풀지 의사코드를 좀 더 꼼꼼하게 작성할 필요가 있다 느꼈다.
다른 사람의 풀이
1. 수식화 해서 한 줄 풀이
2. 변수를 최대한 적게 사용
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
| 카드 뭉치 (0) | 2025.01.20 |
|---|---|
| 명예의 전당 (1) (2) | 2025.01.16 |
| 푸드 파이트 대회 (0) | 2025.01.14 |
| 두 개 뽑아서 더하기 (0) | 2025.01.14 |
| 가장 가까운 같은 글자 (1) | 2025.01.14 |