문제

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

 

제한사항

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

나의 코드

 

import java.util.*;

public class StockPrice {

	public static int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        int cnt = 0;
        Queue<Integer> q = new LinkedList<>();
        Queue<Integer> ans = new LinkedList<>();
        for(int e : prices) {
        	q.offer(e);
        }
        while(!q.isEmpty()) {
        	cnt = 0;
        	int com = q.poll();
        	for(int c : q) {
        		if(com <= c) {
        			cnt++;
        		}
        		else {
        			cnt++;
        			break;
        		}
        	}
        	ans.offer(cnt);
        }
        
        for(int i=0; i<answer.length; i++) {
        	answer[i] = ans.poll();
        }
        return answer;
    }
}

 

나의 풀이

우선 효율성, 정확성 둘다 통과는 했지만... 이 문제가 왜 큐/스택으로 분류되었는지 모르겠다. 

카테고리가 스택/큐로 분류되어있어서 쓰긴 썼다만.. 찝찝함이 남는다.

1. 정답을 담을 answer 배열의 크기는 인자로 받아 온 prices의 크기로 선언한다.

2. cnt 변수는 주식이 가격이 오르거나 그대로일때 몇 초가 흘렀는지 기록할 변수다.

3. Queue<Integer> q 는 prices 배열의 값을 그대로 가져올 큐다.

4. Queue<Integer> ans 는 정답을 담을 큐다. 

5. q 가 빈 큐가 될때까지 반복한다.

6. com 변수에는 q의 첫번째 값을 poll 한다.

7. q에 있는 값을 향상된 for문으로 돌린다. (큐를 돌리면 크기가 가변적이라 용이함)

8. 만약 첫번째 주식보다 뒤에 있는 주식이 크거나 같다면(안떨어진다면) cnt를 1씩 증가시킨다.

9. 만약 비교 주식보다 떨어지는 값이 있다면 cnt에 1을 더하면서 break 시킨다. 

10. 다음 while로 넘어가기 전 ans에 offer시킨다.

11. for문을 통해 Queue ans 를 Array answer에 옮긴다.

12. return

'코딩테스트 풀이 > 프로그래머스' 카테고리의 다른 글

힙 - 라면공장 [JAVA]  (1) 2020.05.30
힙 - 더 맵게 [JAVA]  (0) 2020.05.29
스택/큐 - 쇠막대기 [JAVA]  (0) 2020.05.27
스택/큐 - 프린터 [JAVA]  (0) 2020.05.26
스택/큐 - 기능개발 [JAVA]  (0) 2020.05.25

+ Recent posts