우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

πŸ‘¨πŸ»‍πŸ’» PS/JAVA

[JAVA] λ°±μ€€ 9465번 γ€μŠ€ν‹°μ»€γ€‘

2022. 9. 7. 18:00


 

μ μˆ˜ν‘œ Sticker λ°°μ—΄ Sκ°€ μœ„μ™€ 같이 μžˆλ‹€κ³  μƒκ°ν•΄λ³΄μž. 

 

 

그리고 Sticker λ°°μ—΄κ³Ό 크기가 같은 Dp 배열이 μžˆλ‹€κ³  μƒκ°ν•΄λ³΄μž.

 

Dp 배열은 ν•΄λ‹Ή μœ„μΉ˜λ₯Ό λœ―μ—ˆμ„ λ•Œ, 얻을 수 μžˆλŠ” μ΅œλŒ€μ˜ 점수λ₯Ό 기둝해 λ‚˜κ°ˆ 것이닀.

 

λ¨Όμ € Dp[0][1] κ³Ό Dp[1][1]은 κ°„λ‹¨ν•˜λ‹€. ν•΄λ‹Ήν•˜λŠ” 뢀뢄을 λœ―μ—ˆμ„ λ•Œ, ν•΄λ‹Ήν•˜λŠ” 점수만 νšλ“ν•  수 μžˆμ„ 것이닀.

 


 

κ·Έλ ‡λ‹€λ©΄, λ‘λ²ˆμ§Έ μ—΄λΆ€ν„°λŠ” μ μˆ˜κ°€ μ–΄λ–»κ²Œ 될까?

 

λ…Έλž€ 바탕이 μŠ€ν‹°μ»€λ₯Ό λœ―μ€ 뢀뢄이라고 μƒκ°ν• λ•Œ, 

1개만 λœ―λŠ” 경우
μΈμ ‘ν•˜μ§€ μ•Šμ€ μŠ€ν‹°μ»€κΉŒμ§€ λœ―λŠ” 경우

S[0][2] λ₯Ό λœ―μ—ˆμ„ λ•Œ 얻을 수 μžˆλŠ” 졜고 μ μˆ˜λŠ”,

 

μƒμ‹μ μœΌλ‘œ ν•˜λ‚˜λ§Œ λœ―λŠ”κ²ƒμ΄ μ•„λ‹Œ, μΈμ ‘ν•˜μ§€ μ•Šμ€ S[1][1]κΉŒμ§€ λœ―μ€ 점수의 합일 것이닀.

 

즉 DpλŠ” 

ν•΄λ‹Ή μœ„μΉ˜λ₯Ό λœ―μ—ˆμ„ λ•Œ 얻을 수 μžˆλŠ” μ΅œλŒ€ 점수λ₯Ό κΈ°λ‘ν•˜λŠ” 것이기 λ•Œλ¬Έμ—, μœ„μ™€ 같이 기둝할 수 μžˆλ‹€. 


3번째 열은 μ–΄λ–»κ²Œ 될까?

Case. 1
Case. 2

S[0][3]의 경우 2κ°€μ§€ λ°©λ²•μœΌλ‘œ μŠ€ν‹°μ»€λ₯Ό λœ―μ„ 수 μžˆλ‹€.

 

Case. 1의 경우 S[0][1] + S[1][2] + S[0][3] 의 점수λ₯Ό νšλ“ν•  수 있고

Case. 2의 경우 S[1][1] + S[0][3] 의 점수λ₯Ό νšλ“ν•  수 μžˆλ‹€.

 

λ‘˜ 쀑 μ–΄λ–€ 방법을 μ„ νƒν•΄μ•Όν•˜λŠ”μ§€λŠ” λ‹Ήμ—°νžˆ S[0][1] +S[1][2] κ³Ό S[1][1] 쀑 큰 점수λ₯Ό κ°€μ§„ Caseλ₯Ό 선택해야 ν•œλ‹€. 

 

μœ„μ˜ μ˜ˆμ‹œμ˜ κ²½μš°λŠ” S[0][1] +S[1][2] = 100 이고 S[1][1] = 30 이기 λ•Œλ¬Έμ—, Case.1 이 더 높은 점수λ₯Ό νšλ“ν•  수 μžˆμ§€λ§Œ,

 

Case. 2 κ°€ 더 μœ λ¦¬ν•œ κ²½μš°λ„ μžˆλ‹€.

Case. 1
Case. 2

 

μœ„μ˜ μ˜ˆμ‹œμ˜ κ²½μš°λŠ”, S[0][1] +S[1][2] = 70 이고 S[1][1] = 80 이기 λ•Œλ¬Έμ—, Case.2 κ°€ 높은 점수λ₯Ό νšλ“ν•  수 μžˆλ‹€.

 


 

 

즉, μΌλ°˜ν™”λ₯Ό μ‹œμΌœλ³΄λ©΄,

 

Dp[0][3] = max(S[0][1] + S[1][2]  ,  S[1][1] ) + S[0][3] = max(Dp[1][1]  ,  Dp[0][2]) + S[0][3] μž„μ„ μ•Œ 수 μžˆλ‹€.

 

λ§ˆμ°¬κ°€μ§€λ‘œ Dp[1][3] = max(S[1][1] + S[0][2]  ,  S[0][1] ) + S[1][3] = max(Dp[0][1]  ,  Dp[0][2]) +S[1][3] κ°€ λœλ‹€.

 

이 κ·œμΉ™μ„ μ΄μš©ν•΄μ„œ Dp ν…Œμ΄λΈ”μ„ μ±„μ›Œλ‚˜κ°€λ©΄ λœλ‹€!

 

 

이 점화식을 n을 2둜 μž…λ ₯받아도 μž‘λ™λ  수 있게,

 

μœ„μ™€ 같이 첫번째 열에 μ μˆ˜κ°€ 0이 λ“€μ–΄κ°€κ²Œ, Sticker λ°°μ—΄κ³Ό Dp 배열을 μƒμ„±ν•˜μ˜€λ‹€.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main  {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.valueOf(br.readLine());
		
		
		for(int i=1;i<=T;i++) {
			int n = Integer.valueOf(br.readLine());
			long [][] Sticker = new long[2][n+1];
			long [][] Dp = new long[2][n+1];
			
			//Sticker 와 Dp λ°°μ—΄ 생성
			for (int j = 0; j < 2; j++) {
				String[] input = br.readLine().split(" "); // 곡백 λ‹¨μœ„λ‘œ λŠμ–΄ 배열이 생성됨
				for (int k = 1; k < n+1; k++) {
						Sticker[j][k]= Long.valueOf(input[k-1]); //Sticker 배열에 데이터 μ±„μš°κΈ°
				}
			}
			
			Dp[0][1] = Sticker[0][1];
			Dp[1][1] = Sticker[1][1];
			//μ΄ˆκΈ°κ°’ μ±„μ›Œμ£ΌκΈ°
			
			for(int j=2;j<=n;j++) {
				Dp[0][j]= Math.max(Dp[1][j-2],Dp[1][j-1])+Sticker[0][j];
				Dp[1][j]= Math.max(Dp[0][j-2],Dp[0][j-1])+Sticker[1][j];
			}
			//μŠ€ν‹°μ»€ ν…Œμ΄λΈ”μ˜ 열이 2 이상인 κ²½μš°μ— λ™μž‘
			
			long result = Math.max(Dp[0][n], Dp[1][n]);
			System.out.println(result);
		}
	}
}
    'πŸ‘¨πŸ»‍πŸ’» PS/JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JAVA] λ°±μ€€ 11053번 【가μž₯ κΈ΄ μ¦κ°€ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄γ€‘
    • [JAVA] λ°±μ€€ 2156번 【포도주 μ‹œμ‹γ€‘
    • [JAVA] λ°±μ€€ 2193번 γ€μ΄μΉœμˆ˜γ€‘
    • [JAVA] λ°±μ€€ 11057번 γ€μ˜€λ₯΄λ§‰ μˆ˜γ€‘
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”