강의로 돌아가기
최한욱

문제 풀이 과정

저는 이런 방식으로 풀었습니다.
예를 들어 truckweights ={9, 9, 9, 8, 7, 7, 7, 4, 3, 3, 2}, bridgelength = 10, weight = 10 이라면
내림차순으로 된 배열에서 왼쪽값, 오른쪽값을 꺼내 weight를 넘지 않도록 덩어리를 만들었습니다.
그래서,
9 9 9 8,2 7,3 7,3 7 4
를 만들고 각각의 덩어리 길이 + bridge_length - 1을 계속 더하고 마지막에만 1을 더했습니다.
그래서 실행은 다 맞았지만 채점에서 거의 다 틀리네요...
다른 접근법이 필요한 것인지
아니면 틀린 접근법이 있는 것인지 여러분들께 여쭙니다.

작성중인 코드―Solution.java
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
65
66
67
68
69
70
71
class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
       int lengths = truck_weights.length;
        int [] organisedNum = new int[lengths];

        for(int i = 0; i < lengths; i++) {
            int num = 0;
            organisedNum[i] = 0;
            for(int j = 0; j < lengths; j++) {
                if(organisedNum[i] < truck_weights[j]) {
                    organisedNum[i] = truck_weights[j];
                    num = j;
                }
                if(j == lengths - 1) {
                    truck_weights[num] = 0;
                }
            }
        }

        int result = 0;


        int savedNum = 0;
        int whereStart = lengths - 1;
        String str = ""; 
        boolean outFirstFor = true;
        for(int num_1 = 0; true; num_1++) {
            if(savedNum == lengths || lengths == 1) {
                if(lengths == 1) result = bridge_length + 1;
                break;
            }
            savedNum++;
            int frontNum = organisedNum[num_1];
            int sum = 0;
            sum += frontNum;
            int chunksLengths = 1;
            for(int num_2 = whereStart; true; num_2--) {
                if(savedNum == lengths) {
                    outFirstFor = false;
                    str += (chunksLengths + ",");
                    break;
                }
                int backNum = organisedNum[num_2];
                chunksLengths++;
                sum += backNum;
                if(sum > weight) {
                    whereStart = num_2;
                    chunksLengths--;
                    str += (chunksLengths-- + ",");
                    break;
                }
                savedNum++;
            }
            if(outFirstFor == false) {
                break; 
            }
        }

        if(lengths != 1) {
            String [] strSplitedArr = str.split(",");
            for(int i = 0; i < strSplitedArr.length; i++) {
                result += Integer.parseInt(strSplitedArr[i]) + bridge_length;
                --result;
                System.out.println(strSplitedArr[i]);
            }
            ++result;
        }
        System.out.println("answer : "+result);
        return result;
    }
}
1 개의 답변
Sanas92

잘못 이해한 것일 수 있지만 트럭이 지나가는 순서는 배열 그대로 해야하는거 아닌가요??

  • 최한욱
    그러네요.. 감사합니다! 최한욱 2019.03.06 17:50
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.