250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 안드로이드 Sunflower 스터디
- 막내의막무가내 알고리즘
- flutter network call
- 안드로이드 sunflower
- 주엽역 생활맥주
- 안드로이드
- 프로그래머스 알고리즘
- 막내의막무가내 안드로이드
- 막내의막무가내 일상
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 코틀린
- 부스트코스
- 프래그먼트
- 막내의막무가내 SQL
- 막내의 막무가내
- 막내의막무가내 목표 및 회고
- Fragment
- 2022년 6월 일상
- 부스트코스에이스
- 막내의 막무가내 알고리즘
- 막내의막무가내 rxjava
- 막내의막무가내 프로그래밍
- 주택가 잠실새내
- 막내의막무가내 플러터
- 막내의막무가내 플러터 flutter
- 막내의막무가내 코볼 COBOL
- 막무가내
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 프로그래머스 주식가격 -스택, 큐- 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42584?language=java
처음에 리스트로 풀고 테스트케이스도 다 맞길래 통과겠지 싶었다.
public class Solution {
public int[] solution(int[] prices) {
int[] answer = {};
ArrayList<Integer> list = new ArrayList<>();
ArrayList<Integer> resultList = new ArrayList<>();
for (int price : prices) {
list.add(price);
}
int position = 0;
while (!list.isEmpty()) {
int value = list.get(position);
list.remove(position);
//남은 리스트에서 비교
for(int i=0; i<list.size(); i++){
int relativeValue = list.get(i);
// 가격이 떨어진 경우
if(relativeValue < value){
resultList.add(i+1);
break;
}
//마지막까지 가격 안떨어진 경우
else if(i == list.size()-1){
resultList.add(i+1);
break;
}
}
//하나남은경우 0을 결과에 추가하고 break
if(list.size() == 1){
resultList.add(0);
break;
}
}
answer = resultList.stream().mapToInt(Integer::intValue).toArray();
return answer;
}
}
하지만 위의 코드는 테스트케이스는 다 통과했지만 효율성에서 실패했다.
그래서 resultList만 배열로 바꿨으나 효율성 총 5개중 2개만 통과가 되었다.
결국 다 배열로 바꿔서 효율성 테스트도 모두 통과했다.
제출한 코드는 다음과 같다.
public class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
int cursor = 0; // answer index cursor
int position = 0;
while (position < prices.length) {
int value = prices[position++];
//남은 리스트에서 비교
for(int i = position; i<prices.length; i++){
int relativeValue = prices[i];
// 가격이 떨어진 경우
if(relativeValue < value){
answer[cursor++] = i-(position-1);
break;
}
//마지막까지 가격 안떨어진 경우
else if(i == prices.length-1){
answer[cursor++] = i-(position-1);
break;
}
}
//하나남은경우 0을 결과에 추가하고 break
if(position == prices.length){
answer[cursor] = 0;
break;
}
}
return answer;
}
}
효율성에서 문제가 되면 시간복잡도를 먼저 계산해보도록 하자. 위는 for문도 한번밖에 돌지 않기 떄문에 (심지어 중간에 break문도있다.) 공간복잡도가 원인이라 생각했다
그래서 배열로 다 바꿔봤는데 맞아서 다행이다.
댓글과 공감은 큰 힘이됩니다. 감사합니다!!
728x90
'알고리즘 > 스택, 큐' 카테고리의 다른 글
[알고리즘] 백준 9012 괄호 -스택(stack)- 자바 코틀린 (0) | 2020.10.13 |
---|---|
[알고리즘] 프로그래머스 프린터 -큐(queue)- (0) | 2020.06.13 |
[알고리즘] 프로그래머스 쇠막대기 -스택(Stack)- (0) | 2020.05.19 |
[알고리즘] 프로그래머스 짝지어 제거하기 -2017 팁스타운- 스택(Stack) (0) | 2020.05.15 |
[알고리즘][코틀린] 프로그래머스 다리를 지나는 트럭 -스택, 큐- (0) | 2020.03.07 |
Comments