[프로그래머스] 주식 가격 -JAVA

MandarinePunch·2022년 3월 4일
0

코딩 테스트

목록 보기
2/8
post-thumbnail

문제 설명


여기까지가 설명인데... 참 설명이 애매해서 이해하는데 시간이 좀 걸렸다. 어느 훌륭하신 분이 문제를 잘 설명해 주셨는데 그 내용은 다음과 같다.

  • n초 간의 주가를 초 단위로 기록한 배열 prices가 매개변수로 주어질 때, 각 초의 주가를 기준으로 해당 초 부터 n초 사이에 가격이 떨어지지 않은 시간은 몇 초인지 배열에 담아 return 하도록 solution 함수를 완성하세요.
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;
    }
}

조금 더 깔끔해지니 보기도 좋고 기분도 좋다. ㅎㅎ

profile
개발을 좋아하는 귤나라 사람입니다.

0개의 댓글