자바 초급문제로 맨땅에 해딩하기

자바 Level 2 문제, 1. 주식가격 완성

Jungsoomin :) 2020. 4. 16. 16:19

프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/42584)

자바 Level 2 문제의 주식가격 이다.

 

문제 설명

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

제한사항

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

  • prices의 길이는 2 이상 100,000 이하입니다.

 

로직을 다시 짜내려갔다. 출력 값을 받아보고 문제가 있으면 다시 지우고 다시 쓰기를 반복하며 마무리하였는데, 체크해 줄 포인트와 for문에서 변수의 선언과 continue; break; 의 사용점에 따라 로직의 결과가 천차만별로 변한다는 것을 깨닫게 되었다. 반복문을 사용할 줄 안다는 이야기는 제어문의 제어와 변수 선언 , 그리고 그안에서 이루어질 로직들의 과정을 정리할 줄알고 알맞은 지점과 순서에 변수나 제어를 할 줄 알아야 가능하다는 부분에서 배움을 얻어간 것 같아 개인적으로 기쁘고 또한 감사히 생각해보고 있다.

 

마지막 수는 무조건 0 그 전 수는 무조건 1이라는 점을 감안하여 만든 로직이다.

 

second 라는 변수 대신에 인덱스 차이 값인 j -i , (prices.length -1) -1 , (prices.length -2) -1 값을 사용하여 맺고 끊음을 정했다. 개인적으로 아쉬움이 남는 로직이기에 문제를 풀어가는 와중에 다시 한번 만들어보고 싶은 마음이 크게 들었다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package programmers_주식가격;
 
public class subClass3 {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length]; // 길이만큼증가
        
 
        for (int i = 0; i < prices.length; i++) {
 
            if (i != prices.length - 1 && prices[i] > prices[i + 1]) {
                answer[i] = 1;
                continue;
            } // <
            else if (i == prices.length - 1) {
                answer[i] = 0;
                break;
            }
 
            for (int j = i + 1; j < prices.length - 1; j++) {
                if (prices[i] > prices[j]) {
                    answer[i] = j - i;
                    break;
                } else {
                    answer[i] = (prices.length - 1- i;
                } // <
            }
        }
 
        answer[answer.length - 2= 1;
 
        return answer;
    }
}
 
cs