본문 바로가기

programmers-코딩테스트 연습/Level 2.자바

2022-01-04 / 주식가격

문제 설명

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

 

 

제한 사항

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

 

 

입출력 예


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

 

 

 

입출력 예 설명

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

 

기본 코드

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = {};
        return answer;
    }
}

 

 

 

정답 코드

class Solution {
    public int[] solution(int[] prices) {
        
        int[] answer = new int[prices.length];
        int index = 0;
        answer[prices.length-1] = 0;
        
        for (int i = 0; i < prices.length-1; i++) {
            index = 0;
            for (int j = i + 1; j < prices.length; j++) {
                index++;
                if (prices[i] > prices[j])    break;   
            }
            answer[i] = index;
        }
        return answer;
    }
}

 

 

 

 


 

 

 

문제 로직보다도 문제 이해가 더 어려웠던 것 같다. 설명을 보면 가격이 떨어지지 않은 기간은 몇초인지 세는 문제이다.

prices는 1초 간격으로 주식이 얼마인지 들어있는 배열이다. 1초에는 1, 2초에는 2, 3초에는 3 이런 식으로 저장되어 있다. 

 

먼저 1초에 주식가격을 보면 1이고 끝까지 배열을 보면 모두 1보다 크다. 제한 사항에 무조건 1이상이라고 했으니 1초 시점에 가격은 끝까지 떨어질 수 없다. 

2초에 주식가격은 2이다. 그 뒤를 보면 2보다 작은 주식가격이 없기 때문에 2도 끝까지 떨어지지 않는다.

3초에 주식가격은 3이다. 이때 4초에 주식가격은 2이기 때문에 주식이 1초만에 떨어진다. 이렇게 앞전보다 작아지는 시점은 몇초가 지났는지 체크하면 된다.  여기서 주식의 마지막 가격은현재 가격으로 마감하기 때문에 무조건 0의 값을 갖는다.

 

 

answer방의 크기는 주식가격들이 몇초동안 유지되는지 체크해야하기 때문에 prices와 같은 길이로 잡는다. 

index는 몇초동안 떨어지지 않는지 카운트 하기 위해 사용되는 변수이다.

 

  • i 반복문은 몇초동안 주식이 진행됐는지 알기 위해 prices만큼 돌려준다. ( answer의 마지막 방에 0을 넣은 이유는 반복문의 횟수를 줄여보기 위함이었는데 딱히 시간이 줄어들지 않아 length만큼 돌려도 상관 없을 것 같다.)
  • index는 주식가격이 바뀔 때마다 초기화시켜준다.
  • j 반복문은 현재 주식가격의 다음방부터 비교하기 위해 i+1 ~ length까지 반복한다. 현재 주식가격의 전이나 현재 가격은 비교하는데 필요하지 않다. 오히려 그전방은 더 작을 수도 있기 때문에 반복하면 안된다.
  • j 반복문을 돌릴 때마다 index를 증가시킨다. 만약 현재 가격보다 더 작은 가격을 발견하면 비교를 그만하고 누적된 index를 answer방에 넣어준다. 

 

처음엔 if문을 index위에 올려서 체크했었는데 만약 그럴 경우 3초와 4초 사이처럼 1초만에 가격이 떨어질 경우 0초로 카운트 한다. 그래서 index를 먼저 증가시킨 후에 비교를 해줘서 1초 뒤에 떨어진 것을 체크해야한다.

 

 

 

 

코딩테스트 연습 - 주식가격

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

programmers.co.kr

 

'programmers-코딩테스트 연습 > Level 2.자바' 카테고리의 다른 글

2022-01-06 / 더 맵게  (0) 2022.01.06
2022-01-05 / 카펫  (0) 2022.01.05
2022-01-03 / 큰 수 만들기  (0) 2022.01.03
2022-01-02 / 전화번호 목록  (0) 2022.01.02
2022-01-01 / 구명보트  (0) 2022.01.01