본문 바로가기
Algorithm/Programmers

주식가격

by 동그란 혜주 2019. 6. 4.

· 문제 설명

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

 

· 제한 사항

prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
prices의 길이는 2 이상 100,000 이하입니다.

 

· 입출력 예

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초간 가격이 떨어지지 않았습니다.

 


· Thinking 1

0번 인덱스(i) 1은 뒤의 배열이 모두 1이상이기 때문에 끝까지(size-(i+1))초간 가격이 떨어지지 않음
1번 인덱스(i) 2는 뒤의 배열이 모두 2이상이기 때문에 끝까지(size-(i+1))초간 가격이 떨어지지 않음
2번 인덱스(i) 3은 뒤의 2때문에 1초간 가격이 떨어지고 다시 떨어지지 않기때문에(size-(i+1)-1)초간 가격이 떨어지지 않음
3번 인덱스(i) 2는 뒤의 배열이 모두 2이상이기 때문에 끝까지(size-(i+1)가격이 떨어지지 않음
4번 인덱스(i) 3는 뒤의 배열이 없기 때문에 가격이 떨어지지 않음

-> 이거는 그럼 인덱스 i를 기준으로 두고 그 이후의 인덱스 모두 비교 후 인덱스 i의 값보다 큰 값이 있으면 전체 사이즈에서 .. 빼주고


· Thinking 2

public int[] solution(int[] prices) {
    int[] answer = new int[prices.length];
        
    for (int i = 0; i < prices.length; i++) {
		int cnt = 0;
		for (int j = i+1; j < prices.length; j++) {
			if (prices[i] > prices[j]) {
				cnt++;
			}
		}
		answer[i] = prices.length - (i+1) - cnt;
	}
    
    return answer;
}

처음 생각은 이렇게 했는데
정확성 : 6.7 / 효율성 : 0.0
일단 효율성에서는 포문을 두개 쓰면 안될듯
근데 그건 일단 이따 고치자...ㅠ;;

뭐가 문제지?
왜 테스트 케이스만 통과하지?
[10, 2, 4, 6, 2, 5] => [0, 4, 2, 0, 1, 0] 맞는데..


· Thinking 3

전체에서 빼는걸 생각하는게 아니라
작거나 같을때, 즉 떨어지지 않을때의 cnt를 담는..

for (int i = 0; i < prices.length; i++) {
	int cnt = 0;
	for (int j = i+1; j < prices.length; j++) {
		if (prices[i] <= prices[j]) {
			cnt++;
		}
	}
	answer[i] = cnt;
}

도저히 모르겠음..


· 완성 코드

class Solution {
    public static int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        
        for (int i = 0; i < prices.length; i++) {
            int cnt = 0;
            for (int j = i+1; j < prices.length; j++) {
                if (prices[i] <= prices[j]) {
                    cnt++;
                } else {
                    cnt += 1; //떨어지기까지 1초동안 유지되니까 그 시간을 더하고
                    break; //break문으로 빠져나오기
                }
            }
            
            answer[i] = cnt;
        }
        
        return answer;
    }
}

 


· 문제 출처

https://programmers.co.kr/learn/courses/30/lessons/42584

 

알고리즘 연습 - 주식가격 | 프로그래머스

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 입출력 예 prices return [1, 2, 3, 2, 3] [4, 3, 1, 1, 0] 입출력 예 설명 1초 시점의 ₩1은 끝까지 가격이 떨어지지

programmers.co.kr

 

'Algorithm > Programmers' 카테고리의 다른 글

최솟값 만들기  (0) 2019.06.04
최댓값과 최솟값  (0) 2019.06.04
점프와 순간 이동  (0) 2019.06.04
전화번호 목록  (0) 2019.06.04
위장  (0) 2019.06.04

댓글