CodeingTestPrac/Java Coding Test

코테 연습[자바 코테 준비 13일차] stream 연습

sung.hyun.1204 2023. 7. 8. 12:57

 

https://school.programmers.co.kr/learn/courses/30/lessons/43105

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

dp 문제다 . 완탐시 어머무시 하게 가지수가 늘어난다.

 

1차 본인 풀이  정확성 -1 , 효율성 -2 이다.

public int solution1(int[][] triangle) {
    if(triangle.length == 1 )  return triangle[0][0];
    if(triangle.length == 2 )  return Math.max(triangle[0][0] + triangle[1][0] ,triangle[0][0] + triangle[1][1]) ;

    List<Integer> tmp = new ArrayList<>();
    tmp.add(triangle[0][0] + triangle[1][0]);
    tmp.add(triangle[0][0] + triangle[1][1]);
    for(int i = 2 ; i < triangle.length ; i++) {
        List<Integer> sortResult = new ArrayList<>() ;
        for(int j = 0 ; j < triangle[i].length;j++){
            if(j == 0) {
                int givenh = tmp.get(0);
                sortResult.add(triangle[i][0]+givenh);
            } else if (j == triangle[i].length -1) {
                int givenl = tmp.get(tmp.size()-1);
                sortResult.add(triangle[i][i-1]+givenl);
            }else{
                int givenR = tmp.get(j-1);
                int givenL = tmp.get(j);
                sortResult.add(Math.max(givenR,givenL) + triangle[i][j]);

            }
        }
        tmp = sortResult;
    }

    return tmp.stream().max(Comparator.naturalOrder()).orElse(0);
}

 

 

2차 : GPT

public int solution(int[][] triangle) {
    if (triangle.length == 1) {
        return triangle[0][0];
    }

    int[] dp = new int[triangle.length];
    dp[0] = triangle[0][0];

    for (int i = 1; i < triangle.length; i++) {
        dp[i] = dp[i - 1] + triangle[i][i]; // last element in each row

        for (int j = i - 1; j > 0; j--) {
            dp[j] = Math.max(dp[j - 1], dp[j]) + triangle[i][j];
        }

        dp[0] += triangle[i][0]; // first element in each row

    }

    int maxSum = 0;
    for (int num : dp) {
        maxSum = Math.max(maxSum, num);
    }

    return maxSum;
}

 

다른 사람의 풀이 중

public int solution(int[][] triangle) {
    for (int i = 1; i < triangle.length; i++) {
        triangle[i][0] += triangle[i-1][0];
        triangle[i][i] += triangle[i-1][i-1];
        for (int j = 1; j < i; j++)
            triangle[i][j] += Math.max(triangle[i-1][j-1], triangle[i-1][j]);
    }

    return Arrays.stream(triangle[triangle.length-1]).max().getAsInt();
}