여기까지가 설명인데... 참 설명이 애매해서 이해하는데 시간이 좀 걸렸다. 어느 훌륭하신 분이 문제를 잘 설명해 주셨는데 그 내용은 다음과 같다.
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
// prices 배열과 비교해주기 위해 복사
int[] priceClone = prices.clone();
// 결국 배열의 마지막 값은 비교대상이 없어 항상 0이므로
// 효율성을 조금 높여보고자 마지막 배열 반복을 생략했다.
for(int i=0;i<prices.length-1;i++){
// 아주 약간 헷갈렸는데 j=i+1로 지정해 줌으로써 지나간 배열을 다시 순회하지 않는다.
for(int j=i+1;j<prices.length;j++){
answer[i]++;
// 주식이 떡락했다면😢 반복문을 탈출한다.
if(prices[i] > priceClone[j]){
break;
}
}
}
return answer;
}
}
초기 통과 코드이다. 로직을 순차적으로 해결하다보니 코드가 꽤 간결해졌다. 그럼에도 불구하고 코드를 보면 한 가지 의문이 든다.
맞다. 안해줘도 된다. 사실 if(prices[i] > price[j])로 's' 를 빼먹은 오타를 낸 바람에 '아! 같은 배열은 비교가 안되는구나' 라고 착각하여 벌어진 실수이다. 그래서 코드를 좀 더 깨끗하게 재작성해봤다.
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
for(int i=0;i<prices.length-1;i++){
for(int j=i+1;j<prices.length;j++){
answer[i]++;
if(prices[i] > prices[j]){
break;
}
}
}
return answer;
}
}
조금 더 깔끔해지니 보기도 좋고 기분도 좋다. ㅎㅎ