알고리즘 공부/위클리 챌린지

프로그래머스 위클리 챌린지 1주차 - java

철매존 2021. 8. 10. 23:04
728x90

위클리 챌린지가 있길래 한번 끝까지 다 해보도록 했다...

 

문제 설명

1. 원래 이용료, 내가 가진 돈, 이용 횟수를 입력받는다.

2. 이용 횟수에 따라 가격이 계속 증가한다.

3. 내가 가진 금액에서 얼마가 부족한지 return하고, 부족하지 않으면 0을 return하면 된다.

풀이 과정

 1. 본래 푼 방식은 그냥 이용 횟수까지 쭉쭉 더해가면서 진행했다.

 2. for문으로 돌려서 구하고, 그것에서 기본 금액 money을 빼준 후에, 이게 0보다 작으면 0을 return했다.

 3. 풀이 자체는 간단한데 더 편한 방법이 있었다.

코드

 

이후로 다른 사람의 풀이가 있었는데, 훨씬 간단하고 좋은 풀이가 있었다.

풀이 과정

 1. 전체 이용 금액의 경우는

기본 이용금액 * ( 이용횟수 * (이용횟수+1) / 2 ) 가 된다.

ex ) 3원으로 4번 타면

3 + 6 + 9 + 12 일 수도 있지만

3 * (1+2+3+4) 가 되고 이는

3 * ( (4 * 5)/2 ) 가 될수도 있는 것이다 <- 평균 구하기...이걸 이렇게 쓰네.....

 

 2. 이후 Math.max를 사용해서 0과 해당 금액에서 money를 빼 준 값에서 return하면 된다.

 3. 이 경우 0보다 작으면 무조건 0이 되니까....

 

그 코드는 다음과 같다.

 

코드

 

간단한 문제지만 더 생각하면 훨씬 더 간단해 질 수 있었다....