스택/큐_주식가격

2021. 3. 18. 13:162021/CODING STUDY

문제 설명

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

 

제한사항
  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
price 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초간 가격이 떨어지지 않았습니다. -> 마지막에는 무조건 0초동안 떨어지지 않는다.
나의 풀이
import java.util.ArrayList;
import java.util.List;

public class StackAndQueue2 {
	public static List<Integer> solution(int[] prices) {
    
		List<Integer> answer = new ArrayList<Integer>();

          for(int i=0; i<prices.length-1; i++){
              int count = 0;
              for(int j=i+1; j<prices.length; j++){
                  if(prices[i]<=prices[j]){
                      count+=1;
                  }
                  else{
                      count+=1;
                      break;
                  }
              }
              answer.add(count);
          }
          
        answer.add(0);
        return answer;
    }
}

1. prices에서 다음 요소가 자신보다 크거나 같은 경우  count를 올려주고, 만약 작은 경우에는 count를 +1한 이후에 내부 for문을 탈출한다. 

2. 비교가 끝날때 마다  count를 answer에 add한다.

3. 모든 비교가 끝이 나면 마지막 주식의 가격은 무조건 0초 동안 떨어지지 않으므로 0을 add한다.

 

다른 사람의 풀이
class Solution {
    public int[] solution(int[] prices) {
        int len = prices.length;
        int[] answer = new int[len];
        int i, j;
        for (i = 0; i < len; i++) {
            for (j = i + 1; j < len; j++) {
                answer[i]++;
                if (prices[i] > prices[j])
                    break;
            }
        }
        return answer;
    }
}

이 풀이의 경우 나와 달리 if/else없이 answer에 1을 증가 시키고, if문으로 비교해서 가격이 떨어지는 경우에는 내부 for문을 탈출한다.

 

 

 

 

 

'2021 > CODING STUDY' 카테고리의 다른 글

스택/큐_기능개발  (0) 2021.03.18
해시_위장  (0) 2021.03.15
해시_전화번호 목록  (0) 2021.03.11
해시_완주하지 못한 선수  (0) 2021.03.10