BackJoon Algorithm 9465 스티커 (Java)

업데이트:
최대 1 분 소요

BackJoon Algorithm - Java

alt

문제

alt

풀이

  • 특정 n번 째 dp값을 채우기 위해선, 한 칸 또는 두 칸 뒤의 대각선을 고려해주면 된다.
점화식은 dp[0][j]=Math.max(dp[1][j-1],dp[1][j-2])+sticker[0][j];
        dp[1][j]=Math.max(dp[0][j-1],dp[0][j-2])+sticker[1][j];
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Back_9465 {
    public static void main(String[] args) throws IOException {


        // given
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());        // 테스트 케이스

        // when
        for(int i=0;i<T;i++){
            int n = Integer.parseInt(br.readLine());

            // 입력되는 n 값 배열 생성
            int sticker[][] = new int[2][n+1];
            int dp[][]=new int[2][n+1];
            
            // 스티커 점수 입력
            for(int j=0;j<2;j++){
                StringTokenizer token = new StringTokenizer(br.readLine());
                for(int k=1;k<=n;k++){
                    sticker[j][k]=Integer.parseInt(token.nextToken());
                }
            }
            // 0번째와 1번째 행의 첫번째 열이 초기화로 초기값이 됨
            dp[0][1]= sticker[0][1];
            dp[1][1]= sticker[1][1];
            
            // 행 0번 1번 동시처리
            for(int j=2;j<=n;j++){
                dp[0][j]=Math.max(dp[1][j-1],dp[1][j-2])+sticker[0][j];
                dp[1][j]=Math.max(dp[0][j-1],dp[0][j-2])+sticker[1][j];
            }
            // then
            // 두 열중 최댓값을 반환후 출력
            System.out.println(Math.max(dp[0][n],dp[1][n]));
        }
        br.close();
    }

}




댓글남기기