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

자바 Level 2 문제, 2-1. 프린터 진행 2일차

Jungsoomin :) 2020. 4. 19. 00:37

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

자바 Level 2 문제의 프린터 이다.

 

로직을 짜내려가는데 걸린 시간은 한 2시간 30분 정도 걸린 듯 싶다.

중간에 고개를 갸우뚱하며 가만히 앉아서 생각도하고 턱을 괴기도하고 멍하니 정면을 바라보면서 순간순간 참 고민을 많이 했다. 이런 저런 로직을 짜보고 Arrays 클래스가 가진 메서드를 활용하기 위해서 [이것이 자바다.] 교재에서 원리를 천천히 들여다 보기도하며 짜내려갔고 테스트에서 문제가 통과되어서 "다행이다."라고 말한 후에 제출해보았다. 기대는 하지않았다, '분명히 내가 놓친 점이 있는 것 같아..'라고 짜내려가면서도 생각이 들었기 때문이다.

 

 

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package programmers_프린터;
 
import java.util.Arrays;
 
public class subClass2 {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        check[] list = new check[priorities.length];
        check[] list2 = new check[priorities.length];// <<옮겨 담을 배열
        int leng = 0;
 
        for (int i = 0; i < priorities.length; i++) {
            list[i] = new check(i, priorities[i]);// 여기까지 인덱스 넘버 중요도 정리 끝
            // System.out.println(list[i].proper+","+list[i].location); <<확인결과 제대로 작동하고 있음
        }
 
        Arrays.sort(priorities);
        int max = priorities[priorities.length - 1];// 최댓값 확보함 기준으로 인덱스 복사할 것임
 
        for (int i = 0; i < list.length; i++) {
            if ((list[i].proper) == max) {// 중요도가 같은 인덱스 발견 시.
                System.arraycopy(list, i, list2, 0, list.length - i);// <여기에 복사할 길이를 설정해야함.
                leng = list.length - (list.length - i);// <
                break;
            }
        }
 
        for (int i = 0; i < list2.length; i++) {// <<<<<
            if (list2[i] == null) {// null값이 도출된다면
                System.arraycopy(list, 0, list2, i, leng);
                break;
            }
        }
 
        /*
         * for(int i =0; i<list2.length;i++) {
         * System.out.println(list2[i].location+","+list2[i].proper); }
         */
         
 
        for (int i = 0; i < list2.length; i++) {
 
            if (list2[i].location == location) {// 필드값과 매개변수 값이 같다면
                answer = i + 1;
                break;
            }
        }
        //System.out.println(answer);
 
        return answer;
    }
 
    public class check {
 
        int location;
        int proper;
 
        check(int location, int proper) {
            this.location = location;
            this.proper = proper;
        }
    }
}
 
cs

마땅히 더 부딪쳐야할 문제이기에 감사하다는 마음이 가장 먼저 들었다. 이번 오답으로 조금 더 문제에 접근했다고 생각한다.

 

이후에 다시 기존의 짜내려놓은 코드의 틀을 가지고 시작해보고 있는 중이다. 오답이 어떻게 도출이 됬을 지에 대하여 가만히 적어내려가다보니 테스트 결과가 그 후의 수의 이동에대해서 그리고 프린터의 원리에 대해서 더 고려하지 않아도 풀 수 있는 테스트라는 것을 알게되었다. 그 이후의 로직 과정도 반복을 해주어야 맞다는 것을 깨달아서 '스스로 너무 가볍게 생각하고 접근 한 것은 아닌가..?' 싶은 생각에 다양한 사고와 메소드 사용에 대한 활용, 반복의 이해가 필요하다는 마음과 더불어 로직에 대한 기대감, 그리고 프린터 과정에 대해서 감탄을 하게 되었다.

 

다시금 로직을 짜내려가며 재도전을 하고있는 상황이다. 풀고있는 문제 작성공간이 이미 라이브러리 클래스이고 그 곳에 메소드를 짜내려가야 한다고 생각이 드는데... 개인적으로 클래스를 만들고 그 것을 사용하는 과정에서 미숙함을 느끼는 순간이 있어서 메소드를 만들어 하나씩 쌓아볼까 생각하면서 다시 짜내려가고있다. :)