내가 개발해볼게!!

[BOJ] 1932번: 정수 삼각형(Java) 본문

Algorithm/BOJ

[BOJ] 1932번: 정수 삼각형(Java)

보송송희 2023. 8. 10. 23:39

https://www.acmicpc.net/problem/1932

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

 

문제

 

입력

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

 

출력

첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다.

 

난이도

실버 1

 

Sol

역으로 삼각형의 맨 아래쪽부터 위로 한 칸씩 올라가면서 인접한 값 중 최댓값을 찾아 누적한다. 맨 아래 층부터 꼭대기까지 누적을 반복하고, 최종적으로 누적값(triangle[0][0])을 출력한다.

public class B1932_정수삼각형 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer token = new StringTokenizer(bf.readLine());
        int n = Integer.parseInt(token.nextToken());
        int[][] triangle = new int[n][n+1];

        for(int i=0; i<n; i++){
            token = new StringTokenizer(bf.readLine());

            for(int j=0; j<i+1; j++){
                triangle[i][j] = Integer.parseInt(token.nextToken());
            }
        }
        // input

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

        System.out.println(triangle[0][0]);
        // output
    }
}

 

😅

  • triangle 배열과 dp 배열을 따로 생성했다가 시간 단축을 위해 triangle 배열 하나에서 연산을 끝냈다
  • ArrayList를 사용하고 싶었는데 반복문을 어떻게 돌려야 할지 헷갈려서 사용하지 못했다..

 

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 백준 2343번: 기타 레슨(Java)  (0) 2023.08.17
[BOJ] 1012번: 유기농 배추  (0) 2023.08.15
[BOJ] 9465번: 스티커  (0) 2023.08.08
[BOJ] 1495번: 기타리스트(java)  (0) 2023.08.04
[BOJ] 1149번: RGB거리  (0) 2023.08.02