알고리즘/프로그래머스 Level1

[프로그래머스,Java] Level1 : 위클리 챌린지 1주차

류창 2021. 8. 6. 14:41
반응형

문제분석:

 

매우 간단한문제였다. price*count 증가 수 마다 더해준뒤 money를 뺀값을 반환하면된다. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
    public long solution(int price, int money, int count) {
        long answer = -1;
        long sum=0;
        
        for(int i=count;i>0;i--){
            sum+=i*price;
        }
        if(sum<=money) {      
            return 0;   
        }
        
        return answer=sum-money;
    }
}
cs

 

주의해야할점: 범위가 매우클때 price*count수만큼 곱하다보면, 매우큰 숫자가 나와 int형을벗어나게된다.

 

처음에 int sum=0; 설정했다가, 테케 5개정도가 오류가 났었다. int형이 벗어날것같다면

 

long sum=0; 을 설정하자.

 

1
2
3
4
5
class Solution {
    public long solution(long price, long money, long count) {
        return Math.max(price * (count * (count + 1/ 2- money, 0);
    }
}
cs

 

다른사람의 풀이중에 눈길을 사로잡은 풀이가 있었다.

 

바로 등차수열의 원리를 사용한 n*(n+1)/2{연속된 숫자 n의합} 공식을 쓴 풀이다.

 

필자는 문제를보고 1.여러번반복해서 더해야겟내? -> 2. 반복문써야겟다 라고 생각햇지만

 

이분은 일정한 규칙을보고 바로 등차수열공식을 대입해 연산속도를 줄엿다.

 

이런건 반드시 배워야하는 스마트한 코딩이라고 생각한다.

반응형