반응형
지난주에 응시했는데 늦게 응시했다.
근데 그렇다고 추천을 많이 받을 만한 신박한 풀이를 제출한 것도 아니었다.
오늘로 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 를 배열로 받아버렸다. 가우스 공식 이용한 건 변함없다.
반응형
'프로그래머스 > level 1' 카테고리의 다른 글
[프로그래머스] 자릿수 더하기 (0) | 2021.08.14 |
---|---|
[프로그래머스][위클리챌린지] 2주차 상호평가 (0) | 2021.08.14 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2021.08.09 |
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2021.08.09 |
[프로그래머스] 제일 작은 수 제거하기 (0) | 2021.08.09 |