1. 문제
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 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초간 가격이 떨어지지 않았습니다.
2. 내풀이
아얘.. 문제 이해를 못했다. 다른 사람 풀이를 보고 문제를 이해 하였다.
문제에 대한 이해를 풀어서 설명해본다.
이문제는 price[0]이 price[i]보다 언제 커지는지 까지 걸리는 시간을 answer[0]에 넣는 문제이다.
즉, 문제의 예제에서 price[0]인 1은 다음 값인 price[1]보다 작다. 따라서 1초가 늘어나고
다음 price[2]인 3과 비교된다. 역시 작으므로 1초가 더 늘어나고 계속해서 price의 끝인
price[4]인 3보다 작으므로 역시 1초가 늘어나서 총 4초동안 가격이 떨어지지 않는다.
answer[0] = 4 가된다.
그다음은 price[1]이 되겠다. 하지만 price[1]은 price[2]부터 비교가된다. 마찬가지로 끝까지
price[i]보다 커지지 않으므로 총 3초동안 가격이 떨어지지 않아서 answer[1]은 3이된다.
이러한 형태이다.
3. 다른 사람 풀이
public class Stockprice {
public int[] solution(int[] prices) {
int[] answer = {};
// answer의 크기는 prices의 크기와 같다.
answer = new int[prices.length];
// 가격이 내려가지 않는 시간.
int count = 0;
// prices[0]부터 시작해서 price[prices.length - 1]까지 간다.
for (int i = 0; i < prices.length; i++) {
// prices[i]의 비교는 price[i + 1]부터 시작되므로
for (int j = i + 1; j < prices.length; j++) {
// prices[i]가 prices[j]보다 작다면 count ++
if(prices[i] <= prices[j]){
count++;
}
// prices[i]가 price[j] 보다 크다면 count ++후 종료 ,answer[i+1]차례로 넘어감
else{
count++;
break;
}
}
//answer[i]는 count를 넣고
answer[i] = count;
//count는 다음 answer[i + 1]를 위해서 초기화.
count = 0;
}
return answer;
}
}
4. Tip
- 문제풀이를 이해를 제대로해라. : 문제 설명이 조금더 부드러웠으면 좋겠다.
- 이중배열문으로 풀되 쓸데 없는 계산을 배제 하고 if else문으로 예외처리를 확실히 한다.
'알고리즘 > Programers' 카테고리의 다른 글
Programmers - 스택/큐 [다리를 지나는 트럭] (0) | 2020.10.27 |
---|---|
Programmers - 스택/큐 [기능개발] (0) | 2020.10.27 |
Programmers - Hash [위장] (0) | 2020.10.22 |
Programmers - 분류 [제목] (0) | 2020.10.22 |
Programmers - Hash [전화번호 목록] (0) | 2020.10.22 |