🌞Algorithm/πŸ”₯Baekjoon

[Baekjoon] 1965_μƒμžλ„£κΈ°

λΏŒμ•Ό._. 2026. 1. 8. 10:45
문제(좜처: https://www.acmicpc.net/problem/1965)

< μƒμžλ„£κΈ° >

 

문제 풀이 

 

μ•žμ— μžˆλŠ” μƒμžμ˜ 크기가 뒀에 μžˆλŠ” μƒμžμ˜ 크기보닀 μž‘μ€ 경우 넣을 수 μžˆλ‹€λ©΄, 쀑첩 λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ μœ„μΉ˜λ³΄λ‹€ μ•žμ— μžˆλŠ” μƒμžμ˜ 크기가 μž‘μœΌλ©΄ ν˜„μž¬ μœ„μΉ˜ κ°’κ³Ό, μ•žμ— μƒμž μœ„μΉ˜μ˜ κ°’ +1을 λΉ„κ΅ν•˜μ—¬ μ΅œλŒ“κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•œλ‹€.

 

λ§Œμ•½, μ˜ˆμ œκ°€ μ•„λž˜μ™€ κ°™λ‹€λ©΄

8
1 6 2 5 7 3 5 6

 

λ‹€μŒκ³Ό 같이 ν‘œκ°€ μ±„μ›Œμ§„λ‹€.

box 1 6 2 5 7 3 5 6
  1 2 2 3 4 3 4 5

 

 

my solution (Java)

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

public class _1965_ { // μƒμžλ„£κΈ°

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int n = Integer.parseInt(bf.readLine());

		int box[] = new int[n];
		st = new StringTokenizer(bf.readLine());
		for (int i = 0; i < n; i++) {
			box[i] = Integer.parseInt(st.nextToken());
		}

		int dp[] = new int[n];
		for (int i = 0; i < n; i++) {
			dp[i] = 1;
		}

		for (int i = 1; i < n; i++) {
			for (int j = 0; j < i; j++) {
				if (box[j] < box[i]) {
					dp[i] = Math.max(dp[i], dp[j] + 1);
				}
			}
		}

		int result = 1;
		for (int i = 0; i < n; i++) {
			result = Math.max(result, dp[i]);
		}
		
		System.out.println(result);
	}
λ³€μˆ˜)
n : μƒμžμ˜ 개수
box : μƒμžμ˜ 크기
dp : 각 μœ„μΉ˜μ—μ„œ 넣을 수 μžˆλŠ” μ΅œλŒ€μ˜ μƒμž 개수 
result : 넣을 수 μžˆλŠ” μ΅œλŒ€μ˜ μƒμž 개수 

 

μƒμžμ˜ 개수λ₯Ό μž…λ ₯λ°›λŠ”λ‹€. μƒμžμ˜ 개수만큼 μƒμžμ˜ 크기λ₯Ό μž…λ ₯λ°›μ•„ box 배열에 μ €μž₯ν•œλ‹€. 각 μœ„μΉ˜μ—μ„œ 넣을 수 μžˆλŠ” μ΅œλŒ€μ˜ μƒμž 개수λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄ 배열을 1둜 μ΄ˆκΈ°ν™”ν•œλ‹€. for문을 ν™œμš©ν•˜μ—¬ ν˜„μž¬ μœ„μΉ˜μ—μ„œ μ•žμ˜ μƒμžλ₯Ό νƒμƒ‰ν•˜λ©° ν˜„μž¬ μƒμžλ³΄λ‹€ μž‘λ‹€λ©΄ μ΅œλŒ“κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•œλ‹€. 

 

μ΅œμ’… dp 배열을 νƒμƒ‰ν•˜λ©° μ΅œλŒ“κ°’μ„ 좜λ ₯ν•œλ‹€.