반응형

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이 (java)

import java.util.ArrayList;
import java.util.List;

public class StockPrices {

    public static void main(String[] args) {
        int[] arr = {1,2,3,2,3};
        solution(arr);
    }

    public static int[] solution(int[] prices) {
        List<Integer> secondsArr = new ArrayList<>();
        for (int i = 0; i < prices.length; i++) {
            int seconds = 0;
            for (int j = i; j < prices.length; j++) {
                if (prices[i] > prices[j] || j == prices.length-1) {
                    secondsArr.add(seconds);
                    break;
                }else{
                    seconds ++;
                }
            }
        }
        return secondsArr.stream().mapToInt(Integer::intValue).toArray();
    }
}

풀이 방법

특별히 어려운 로직은 없고, 스택/큐의 문제임을 무시하고, 이중 for문으로 해결 가능

  • List -> Array
    list.stream().mapToInt(Integer::intValue).toArray();

다른사람의 풀이 (java) 

class Solution {
    public int[] solution(int[] prices) {
        int len = prices.length;
        int[] answer = new int[len];
        int i, j;
        for (i = 0; i < len; i++) {
            for (j = i + 1; j < len; j++) {
                answer[i]++;
                if (prices[i] > prices[j])
                    break;
            }
        }
        return answer;
    }
}

Godd Idea : 거의 비슷. seconds 변수를 사용하지 않고 바로 index로 접근해서 카운트하고, 조건문이 조금 다른게 차이

느낀점

  • 스택/큐를 사용하지 않는대신, 아래 2가지 방법을 사용 가능
    • temp 변수에 이전 값 or 이전까지의 특정값(최대값 등)을 저장해서 비교/처리 가능
    • 이중 for문 등을 사용하되, list의 index로 값에 직접 접근 : arr[i]++;
  • 물론 코드 짜고, 정리하지 않아 지저분한걸 감안해도, 코드가
    가독성이 떨어지고,
    그렇다고 재사용성이 좋지도 않고,
    아이디어가 좋은 것도 아니고,
    그냥 문제를 푼 느낌이 없지 않아 있다
  • 하지만, 코드를 직독직해 하듯이 풀었기에, 초보자가 보기에는 오히려 편할수도?!

 

반응형

+ Recent posts