일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[프로그래머스 / Level1] 부족한 금액 계산하기 (Java) 본문
728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/82612
기존 코드 (성공)
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
for(int i=0; i < count; i++){
answer += price + (price * i);
}
return money - answer >= 0 ? 0 : answer - money;
}
}
- 마지막 return문에서 money와 answer 빼기 연산을 두번하는 것이 비효율적으로 보인다.
개선 코드 (성공)
class Solution {
public long solution(int price, int money, int count) {
long answer = money;
for(int i = 0; i < count; i++){
answer -= price * (i + 1);
}
return answer > 0 ? 0 : -answer;
}
}
- 메소드 내 변수를 매개변수로 받은 값으로 바로 초기화
- 일정한 패턴으로 증가하는 숫자는 for문의 i값을 이용해 조정 가능
- 기존의 코드는 answer(이용금액 합계)와 money(소지금)을 마지막에 빼기 연산하는 식이었는데, 이를 처음부터 answer에 money값을 저장해두고 for문에서 차례로 이용요금을 빼는 식으로 해서 빼기 연산 횟수를 줄임. (부족한 금액 문제에서는 처음 소지금에서 이용금액을 빼는식으로 계산하는 게 효율적, 코드도 직관적)
- 등차수열의 합 등 수학공식을 이용한 방법도 있으나, 코드는 일단 한눈에 봤을 때 무슨 기능을 하는지 파악하기 쉬워야 하기 때문에 이 방법은 사용X, 코드의 전체 길이나 고급 기술에 연연하지 말고 다른 사람(평가자, 동료 등)이 봤을 때 이해하기 쉽게 코드를 짜자!
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스 / Level1] 두 개 뽑아서 더하기 (Java) (0) | 2021.11.04 |
---|---|
[프로그래머스 / Level1] 비밀지도 (Java) (0) | 2021.11.01 |
[프로그래머스 / Level1] 2016년 (Java) (0) | 2021.10.31 |
[프로그래머스 / Level1] 다트 게임 (Java) (0) | 2021.10.31 |
[프로그래머스 / Level1] 3진법 뒤집기 (Java) (0) | 2021.10.30 |
Comments