프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/42584)
자바 Level 2 문제의 주식가격이다.
거창하게 Level 2라고 했지만 ..
스스로 더 상승했다기 보다는...차근차근 밟아나가는 과정의 내 모습이라.. Level 2라고 해도 문제를 접하시는 분 마다 다른 난이도를 체감하시리라 생각하며 겸손한 마음을 깊이 품고 있다.
사실 스스로 되돌아 볼때에 보기에 편하기 위해서 제목에 레벨을 구분해놓은 것으로, 부디 넓은 마음으로 이해해주시길 부탁드려본다.
아직 다 완성하지 못했고 로직에서의 빈틈이 꽤 발견되는 상황이다. 처음에는 간단하게 접근했으나, 제출과정에서 실패를 보고서 "second 변수를 어떻게 증감시킬까..테스트 예외 빼고는 또 어떤 변수가 나타날까.."하면서 다시 코딩을 해내려가기 시작했다. 로직에서 어떤 점이 변수인지 생각해보게 되는 듯 하다. 실제로 테스트 예외도 추가시켜보면서 다시 차근차근 접근해보고 있는 상태이다. 이미 코딩 문제를 푸는 과정에서 많은 시행착오를 겪고 있고 레벨을 하나 올린상태여서 더 많이 경험하고 찾아보고 싶은 마음이 큰 상태이다.
지금 다시보기에도 빈틈이 다수 생길 것 같아보여서 부딪치고 깨져보면서 경험해봐야 할 듯 하다. :)
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 35 36 37 38 39 40 41 42 43 | package programmers_주식가격; public class subClass2 { public int[] solution(int[] prices) { int[] answer = new int[prices.length]; int check = 0; int second = 0;// 변수간 거리는 second for (int i = 0; i < prices.length; i++) { second = 0; if (i < prices.length - 1 && prices[i] > prices[i + 1]) {// << 실행예외발생지점 second = 1; answer[i] = second;// 경우1 로직 break;// < } else if (i == prices.length - 1) {// 다음 수가 없을경우 second = 0;// 간격은 0 answer[i] = second;// 경우2 로직 break;// < } else {// 그 외의 경우는 다음수가 크거나 작아서 종료점 까지의 거리계산을 해야줘야하는 경우이다. try { for (int j = i + 1; j < prices.length; j++) {// 비교 할 수 if (prices[i] > prices[j]) { second = j - i; break;// < } // 멈출 부분을 확인하게된다면 j-i가 거리값이 되고 } answer[i] = second;// 거리 대입해주고 } catch (ArrayIndexOutOfBoundsException e) {// 실행예외는 마지막 수일때만 나옴 answer[i] = 0; break;// < } } // <<20~33 라인 로직 다시 짜줘야함, 가정 변수는 확인했는데 평소의 거리계산 로직이 0으로 찍힘 } // 바깥 for 문 종료 for (int i = 0; i < answer.length; i++) { System.out.println(answer[i]); } return answer; } } | cs |
여기까지가 지금까지 한 진행과정이다. 33라인의 주석에서 기본적인 second 변수 증가가 잘 이루어지지 않는 상태이다. 이 로직을 해결하고 다음 결과를 봐야할 듯 하다.
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 35 36 37 38 39 40 41 42 | package programmers_주식가격; public class subClass { public int[] solution(int[] prices) { int[] answer = {}; // 초단위로 기록된 주식가격이 담긴 배열 prices가 주어짐 // 가격이 떨어지지 않는 기간이 몇초인지 확인하여 answer로 리턴 // prices = 1,2,3,2,3 answer = 4,3,1,1,0 // answer 의 길이는 prices 의 길이 int count = 0; answer = new int[prices.length]; for (int i = 0; i < prices.length; i++) {// 기준은 prices[i] count = 0;// 다시 비교할떄마다 다시 0으로 초기화. for (int j = i + 1; j < prices.length; j++) {// 비교할 숫자들은 나머지 인덱스들 try { if (prices[i] <= prices[j]) { answer[i] += 1;// 넣어줌 } else if (prices[i] > prices[i + 1]) {// 바로 앞 수가 더 크면 끊어버린다. 그런데 어레이 인덱스 아웃오브 바운드 엑셉션이 날 수 도 있다. // <<여기서 문제가 나고 있음. answer[i] = 1; break;// < } else { break;// << 여기서 문제가 생김. } } catch (ArrayIndexOutOfBoundsException e) {// 예외가 발생할 경우는 딱 2가지임 i+1 이 인덱스 범위를 초과했을떄 즉 i의 숫자가 마지막 인덱스 // 갑실떄 // 다음 수가 없으므로 count 는 0로 잡아주고 answer[i] = 0;// 0대입 } } // <여기까지 안 쪽 for 문 종료 } for (int i = 0; i < answer.length; i++) { System.out.println(answer[i]); } return answer; } } | cs |
이전까지 쓰던 코드이다. 여기서 테스트는 통과했지만 제출과정에서 실패를 겪게되어서 second는 인덱스사이의 간격이라는 점과 경우의 수에 따라서 다른 값을 가질 수 있다라는 것을 느껴서 클래스를 다시 열어 코드를 작성하기 시작했다.
'자바 초급문제로 맨땅에 해딩하기' 카테고리의 다른 글
자바 Level 2 문제, 2. 프린터 진행 중 (0) | 2020.04.18 |
---|---|
자바 Level 2 문제, 1. 주식가격 완성 (0) | 2020.04.16 |
자바 초급문제 28. 정수 내림차순으로 배치하기 (0) | 2020.04.14 |
자바 초급문제 27. 자연수 뒤집어 배열로 만들기 (0) | 2020.04.14 |
자바 초급문제 26. 자릿수 더하기 (0) | 2020.04.14 |