Java/Coding

Weekly Challenge 1주차

HoneyIT 2021. 8. 5. 14:58
반응형

문제설명

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.

 

제한사항

  • 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
  • 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
  • 놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

 

입출력 예

 

class Solution {
    public long solution(int price, int money, int count) {
        
        int sum = 0;
        int answer = 0;
        
        for(int i = 1; i <= count; i++){
            sum += price * i;
        }
        
        answer = money - sum;
        
        if(answer > 0){
            return 0;
        } else {
            return -answer;
        }
    }
}

초기에 내가 짠 코드는 위와 같다.

 

테스트 실행은 통과하지만 정확성 테스트에서 실패한다.

 

원인을 분석해보니 메소드 타입은 long인데 반환 타입은 int 형태라는 초보적인 실수를 했다.

 

변수 타입을 메소드 타입과 일치하는 long으로 변환하니 통과했다.

 


이외 풀이들

 

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);
    }
}

삼항조건연산자로 if문을 대체하여 간단하게 반환

 

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

공통 인수인 price로 인수분해하여 나온 값을 Math 함수의 max로 결과 값을 반환

 

이외에 위와 같은 참신한 풀이들도 있습니다.

 

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

반응형

'Java > Coding' 카테고리의 다른 글

Weekly Challenge 4주차  (0) 2021.09.02
Weekly Challenge 2주차  (0) 2021.09.01
Java starsWith,endsWith  (2) 2021.03.17
Java HashMap  (0) 2021.03.08