반응형

 

지난주에 응시했는데 늦게 응시했다.

 

근데 그렇다고 추천을 많이 받을 만한 신박한 풀이를 제출한 것도 아니었다.

 

오늘로 1주차 챌린지가 끝났으니 내 풀이를 올려보겠다.

 

 

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

문제를 보면 등차수열의 합이다.

 

등차수열의 합 공식을 이용하면 된다.

 

100 + 200 + 300 ..  -> 100 * (1 + 2 + 3 ..)

 

3 + 6 + 9 + 12... -> 3 * (1 + 2 + 3 ...)

 

결국 price * 시그마 n 으로

 

 

 

 

위 이미지에서 첫번째 식을 사용하면 된다.

 

 

 

 

** Javascript

 

function solution(price, money, count) {
    const total = price * count * (count + 1) / 2;
    return total > money ? total - money : 0;
}

 

 

** Java

 

class Solution {
    public long solution(long price, long money, long count) {
        long total = price * count * (count + 1) / 2;
        return total > money ? total - money : 0L;
    }
}

 

내 기억으로는 int price, int money, int count 로 처음에 주어졌는데

지난번에 수가 클 경우 시간초과 걸리거나 아예 오답 처리되어 버려서

이번에는 처음부터 long 으로 선언하였다.

 

 

** Python

 

def solution(price, money, count):
    answer = price * count * (count + 1) / 2 - money
    return answer if answer > 0 else 0

 

파이썬으로는 내 기억에 return 부분에서 total - money 하다가 계속 꼬여서 결국 answer 인스턴스에 받은 것으로 기억한다.

 

 

 

 

1등 풀이는 언어마다 거의 다 비슷한데 javascript 의 경우 나처럼 가우스 공식을 이용하였고 java나 python의 경우 가우스 공식 받고 산술평균까지 이용했다. 그래서 조건문을 쓸 필요가 없었다. javascript 도 가능하다(2등 풀이).

 

def solution(price, money, count):
    return max(0,price*(count+1)*count//2-money)

 

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

 

 

const solution = (..._) => Math.max(_[0]*_[2]*++_[2]/2-_[1], 0);

 

위 풀이 경우 price, money, count 를 배열로 받아버렸다. 가우스 공식 이용한 건 변함없다.

 

반응형

+ Recent posts