일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ubuntu
- 백준 1697 자바
- 1697 자바
- 1389자바
- 퇴사
- 노트북 서버
- 1389 JAVA
- 백준
- 1012 자바
- 백준 1389 자바
- 알고리즘
- 5430자바
- 자바
- React Native
- Ubuntu USB부팅
- 백준 1012 자바
- 백준 유기농 배추
- BFS
- Expo
- 백준 5430자바
- 1012 java
- mobaXTerm
- 5430 java
- 백준 1012 java
- 백준 2615
- Today
- Total
삽질메모장
programmers : stack queue 4(주식가격)[java] 본문
https://programmers.co.kr/learn/courses/30/lessons/42584?language=java
코딩테스트 연습 - 주식가격
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00
programmers.co.kr
-문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요
입출력 예
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초간 가격이 떨어지지 않았습니다.
-sol. 1
stack collection class 을 사용하는것 보다 짜기쉽고 코드를 읽고 이해하기도 쉬운것같은 최초 풀이이다.
하지만 카테고리가 stack으로 구분되어있어 찝찝했다.
이중 loop의 첫번째 loop은 비교할 기준 index, 두번째 loop은 기준 인덱스와 비교할 i+1 index 이다
마지막 인덱스를 제외하고 자기 자신이 1초를 유지한것이므로 answer[i]를 무조건 +1하고
값이 떨어지는 시점에 break한다
public class stack_queue_4 {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
int leng = prices.length;
for(int i=0; i<leng; i++) {
for(int j =i+1; j<leng; j++) {
answer[i] ++;
if(prices[i] > prices[j]) {
break;
}
}
}
return answer;
}
}
-sol. 2
다른사람이 stack 을 활용한 풀이를 이해가 가지않다 주석을 달아가며 힘들게 이해했다.
stack에 아직 가격이 떨어지지 않는 인덱스들을 저장하는 방식이다.
개인적으로는 위의 풀이와 시간복잡도가 차이가 나지 않는것으로 보이는데 이런경우는 굳이 제시하는 자료구조를 쓰지 않는것이 나을 수 있다고 생각됐다.
public class stack_queue_4 {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<Integer> stack = new Stack<>();
int i =0;
stack.push(i); //시작하는 index를 push하고 시작한다
for(i =1; i < prices.length; i++) {
while(!stack.empty() && prices[i] < prices[stack.peek()]) { //가격이 떨어지면
int start_index = stack.pop();
answer[start_index] = i - start_index;
}
stack.push(i); //다음 인덱스의 가격이 안떨어지면
}
while(!stack.empty()) { //끝까지 가격이 떨어지지않은 index 처리
int start_index = stack.pop();
answer[start_index] = i -start_index-1; //전체길이 - 현재인덱스 위치(실제길이 위해 -1)해주어 구함
}
return answer;
}
}
'Knowledge > 알고리즘' 카테고리의 다른 글
백준 1018번: 체스판 다시 칠하기(java) (0) | 2023.12.05 |
---|---|
백준 9935번: 문자열 폭발 (java) (2) | 2023.12.01 |
programmers : stack queue 2 (프린터)[java] (0) | 2022.01.11 |
programmers : stack queue 1 (기능개발)[java] (0) | 2022.01.11 |
programmers : hash 4 (베스트앨범)[java] (0) | 2022.01.11 |