반응형
🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/82612
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
보유하고 있는 돈 money가 있고 놀이기구를 탈때마다 price에서 탄 횟수의 배수만큼 금액이 줄어든다고 할 때 count회 놀이기구를 탄다면 부족한 금액을 반환하는 문제. (단 부족하지 않은 경우 0 반환)
🧠 나의 접근 방식과 시행착오
6분에 푼 문제. 먼저 money가 int로 주어지지만 계속 줄어들기 때문에 언더플로우가 발생하는 케이스를 방지하기 위한 것과 결과를 long으로 반환해야 해서 먼저 long으로 변환시켜준다. 그러고 나서는 계속 price에서 반복회차만큼 곱해서 빼주면 됨.
public long solution(int price, int money, int count)
{
// money : 현재 보유 금액
// price : 초기 금액
// count : 놀이기구 탄 횟수
// 한번 탈 때마다 배로 증가함
long moneySum = money;
for (int i = 1; i <= count; i++)
{
moneySum -= (price * i);
}
if (moneySum >= 0) return 0;
return -moneySum;
}
✅ 풀이 코드
등차수열의 공식을 적용해서 O(1)에 푸는 방법을 피드백으로 주었다. 합을 구할 때 수학적으로 규칙이 생기는 부분이 있다면 공식이 있는지 생각해 보고 반복횟수를 줄이는 방향을 고려해 보자. 그 외에는 변수명을 좀 더 직관적으로 바꿔서 풀 것.
public long solution(int price, int money, int count)
{
long totalCost = (long)price * count * (count + 1) / 2;
long shortage = totalCost - money;
return shortage > 0 ? shortage : 0;
}
🔄 정리
등차수열의 합 공식에 대해서는 기억을 해두자.
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Lv.2] 게임 맵 최단 거리 [프로그래머스_코딩테스트] [BFS] [25분] (1) | 2025.07.08 |
---|---|
[Lv.2] 타겟 넘버 [프로그래머스_코딩테스트] [DFS] [25분] (0) | 2025.07.07 |
[Lv.1] 약수의 합 [프로그래머스_코딩테스트] [수학] [10분] (0) | 2025.07.06 |
[Lv.1] 제일 작은 수 제거하기 [프로그래머스_코딩테스트] [배열] [10분] (0) | 2025.07.05 |
[Lv.2] H-Index [프로그래머스_코딩테스트] [정렬] [25분] (0) | 2025.07.04 |