본문 바로가기
개발하자/CodingTest

프로그래머스 주식 가격 Java

by ulqaef 2020. 5. 17.
728x90

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

pricesreturn

[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

소스코드

public class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int[] answer = new int[prices.length];
        for(int i=0; i<prices.length; i++) {
            int decreseCnt = 0;
            for(int j=i+1; j<prices.length; j++) {
                if(prices[i] <= prices[j]) {
                     decreseCnt++;
                } else {
                    decreseCnt++;
                    break;
                }
            }
            answer[i] = decreseCnt;
        }
        answer[prices.length-1] = 0;
        return answer;
    }
}

 

해설

이 문제는 조건을 잘~~~~~ 이해해야 하는 문제였다.

문제 설명 중 "가격이 떨어지지 않은 기간은 몇 초인지" 이 부분을 출제의도에 맞게 잘 해석해야 했다.

 

처음에는 이 표현이 해당 시간에 산 주식가격이 이후 모든 시간에서의 주식가격과 비교하여 떨어지지 않은 전체 시간을 계산해 내야 하는 문제로 해석했다

이대로 테스트를 진행했을 때는 문제 없었으나 채점을 해보니 전부 틀렸다..

테스트 케이스를 직접 추가해보려 해도 문제를 잘못 해석했으니 임의로 추가할 수도 없는 노릇이었다..

 

다시 한 번 "가격이 떨어지지 않은 기간은 몇 초인지" 이 부분을 다른 방향으로 생각해봤다.

 

"가격이 자신이 산 가격보다 '처음으로' 떨어지는 기간까지, 몇 초가 걸렸는지" ..

결과적으로 이렇게 해석하고 위의 코드대로 채점해보니 정답이었다.

 

문제에 주어진 입출력으로 테스트했을 때는 원하는 답이 출력됐다. (하지만 채점해보니 틀렸음)

그래서 다른 입출력으로 비교를 해봤다.

 

위의 두 가지 해석을 각각 비교해보겠다.

 

테스트 입력

prices = { 1, 4, 2, 2, 3},


처음의 해석

  • prices[0]은 이후 4개의 가격과 각각 비교했을 때 네 번 모두 prices[0]가 작거나 같기 때문에 answer[0]에 4가 들어간다.
  • prices[1]은 이후 3개의 가격과 각각 비교했을때 세 번 모두 prices[1]이 크기 때문에 answer[1]에는 0이 들어간다.
  • prices[2]은 이후 2개의 가격과 각각 비교했을 때 prices[3]과는 같고, prices[4]보다 작기 때문에 answer[2]에 2가 들어간다.
  • prices[3]은 이후 1개의 가격과 비교했을때 prices[3]이 더 작기 때문에 answer[3]에 1이 들어간다.
  • prices[4]은 비교대상이 없기 때문에 answer[4]에 0이 들어간다.

수정한 해석

  • prices[0]은 이후 4개의 가격과 각각 비교했을 때 네 번 모두 prices[0]가 작거나 같기 때문에 answer[0]에 4가 들어간다.
  • prices[1]은 바로 다음 인덱스의 값이 prices[1]보다 작기 때문에 prices[2]의 시간이 주식가격이 "처음으로" 떨어진 시간이 되는 것이다. 이전에 해석한 대로라면 주식을 산 때보다 이후의 가격이 오른 적이 없기 때문에 answer[1]에는 0이 들어가야 했다. 하지만 answer[1]에 0이 들어가는 것이 아니라 자신이 주식을 산 순간부터 다음 시간까지의 1초가 진행이 된 상태기 때문에 answer[1]에는 1이 들어가야 한다. (즉, 주식을 산 이후의 가격이 오르던 떨어지던 1초는 진행하기 때문에 무조건 1초를 카운트 해야한다)
  • prices[2]는 prices[3], prices[4]에서 모두 가격이 떨어지지 않았기 때문에 answer[2]에 2가 들어간다.
  • prices[3]은 prices[4]에서 가격이 떨어지지 않았기 떄문에 answer[3]에는 1이 들어간다.
  • prices[4]는 비교할 다음 가격이 없기 때문에 answer[4]에는 0이 들어간다.

접근은 쉬우나 해석하는 데 시간이 오래걸린 문제였다.

 

 

 

 

 

 

 

728x90
반응형

댓글


`