Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- redux-toolkit
- 매일메일
- 테코테코
- useDispatch
- sw expert academy
- 알고리즘
- maeil-mail
- react-router
- Python
- SW
- redux-saga
- createSlice
- 항해99
- json-server
- 프로그래머스
- 코딩테스트합격자되기
- java
- 이코테
- JavaScript
- 자바
- Get
- programmers
- C++
- redux
- Algorithm
- 리액트
- 항해플러스
- react-redux
- react
- axios
Archives
- Today
- Total
Binary Journey
[코딩테스트합격자되기-자바편] 문제12. 주식가격 본문
반응형
💡 해당 풀이는 코딩 테스트 합격자되기 - 자바편 에서 발췌된 내용을 바탕으로 작성되었습니다.
문제
출처: 프로그래머스 - 주식가격
내용
초 단위로 기록된 주식가격이 담긴 배열 prices
가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 반환하도록 solution()
함수를 완성하세요.
제약 조건
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
기록하기
💡 어디까지 생각해봤는지 단계적으로 기록해봅니다.
풀이
풀이 시간
시작 시각 | 종료 시각 | 총 소요 시간 |
---|---|---|
15:55 | 16:36 | 41분 |
문제 분석
제약 사항 파악 & 테스트 케이스 작성
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
시간 복잡도 O(N) 이내에서 해결해야 한다. 모르겠으면 O(N^2) 방식으로라도 푼다.
입력값 분석
💡 입력값을 분석하면 문제에서 요구하는 알고리즘의 시간 복잡도를 간접적으로 파악할 수 있습니다.
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초간 가격이 떨어지지 않았습니다.
의사 코드 작성
💡 의사 코드는 동작 중심으로 작성하는 것이 중요합니다.
💡 의사 코드는 문제 해결 순서로 작성합니다.
💡 의사 코드를 충분히 테스트해봅니다.
- 이중 반복문
solution(prices) { for (i = 0) { for (j = i + 1) { if (prices[j] >= prices[i]) answer++; } } return answer; }
구현
class Solution {
public int[] solution(int[] prices) {
int n = prices.length;
int[] answer = new int[n];
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
answer[i]++;
if (prices[i] > prices[j])
break;
}
}
return answer;
}
}
복기하기
저자 권장 시간 | 권장 시간 복잡도 |
---|---|
40분 | O(N) |
답안과 나의 풀이를 비교해보세요
import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
int n = prices.length;
int[] answer = new int[n]; // 가격이 떨어지지 않은 기간을 저장할 배열
// 스택을 사용해 이전 가격과 현재 가격 비교
Stack<Integer> stack = new Stack<>();
stack.push(0);
for (int i = 0; i < n; i++) {
// 가격이 떨어졌을 때 (이전 가격의 기간 계산)
while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
int j = stack.pop();
answer[j] = i - j;
}
stack.push(i);
}
// 가격이 떨어지지 않았을 때
while (!stack.isEmpty()) {
int j = stack.pop();
answer[j] = n - 1 - j;
}
return answer;
}
}
- 스택으로 하는 게 더 어려운 것 같다.
- 결국 마지막 인덱스가 아닌 이상 무조건 1초는 확보하는 건가
반응형
'Algorithm > 코딩테스트합격자되기-자바편' 카테고리의 다른 글
[코딩테스트합격자되기-자바편] 문제14. 표 편집 (0) | 2025.01.08 |
---|---|
[코딩테스트합격자되기-자바편] 문제13. 크레인 인형뽑기 게임 (1) | 2025.01.08 |
[코딩테스트합격자되기-자바편] 문제11. 짝지어 제거하기 (0) | 2025.01.06 |
[코딩테스트합격자되기-자바편] 문제10. 괄호 회전하기 (2) | 2025.01.04 |
[코딩테스트합격자되기-자바편] 문제09. 10진수를 2진수로 변환하기 (0) | 2025.01.04 |