iknowDev
Blog Driven Development
iknowDev ๐Ÿ˜
/
  • ์ž‘์„ฑ ๊ธ€ ๋ชฉ๋ก
  • Github
  • Category (30)
    • ๐Ÿ“• CS ์Šคํ„ฐ๋”” (22)
      • ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ (0)
      • Java, Spring (5)
      • ๋„์ปค, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, ๋ฆฌ๋ˆ…์Šค (4)
      • ๋„คํŠธ์›Œํฌ (11)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (1)
      • ๋””์ž์ธ ํŒจํ„ด (1)
      • ์ž๋ฃŒ ๊ตฌ์กฐ (0)
    • ๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” (4)
      • Java (3)
      • JavaScript (0)
      • Python3 (1)
    • ๐Ÿ’ป ํ† ์ด ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ๊ธฐ (2)
    • ๐Ÿš€ ๊ฒฝํ—˜ (2)
      • ์—๋Ÿฌ ๋Œ€์‘ (2)
      • ํšŒ๊ณ  (0)
      • ์ฆ๊ฑฐ์šด์ผ (0)

Popular

Tag

Netty   
ํŠธ๋žœ์žญ์…˜   
Spring   
java   
์—๋Ÿฌ ๋Œ€์‘   
Was   
๊ณจ๋“œ   
side Project   
๋ฐฑ์ค€   
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค   

Comment


Designed By hELLO
iknowDev

Blog Driven Development

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””/Java

[๋ฐฑ์ค€][๊ณจ๋“œ 4][DP] 14002. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 4

2022. 12. 11. 07:02
๐Ÿ’ก ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ O(n(n+1)/2)

[๋ฌธ์ œ]

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€ A = {10, 20, 10, 30, 20, 50} ์ด๊ณ , ๊ธธ์ด๋Š” 4์ด๋‹ค.

 

[์ž…๋ ฅ]

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ์ˆ˜์—ด A๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” Ai๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 1,000)

 

[์ถœ๋ ฅ]

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ˆ˜์—ด์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•œ๋‹ค.

 

[ํ’€์ด]

O(nlog n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ์ด๋ถ„ํƒ์ƒ‰ ํ™œ์šฉ ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜(LIS)์œผ๋กœ๋„ ์ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์ง€๋งŒ 

๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 2, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 3, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 5 ๋น„์Šทํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ์ด๋ฏธ LIS ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ๋ฐฉ์‹์˜ ๋ฌธ์ œ ์ ‘๊ทผ์„ ํ•ด๋ณด์•˜๋‹ค.

  1. 0๋ถ€ํ„ฐ ์ž์‹  ์•ž ๋ฒ”์œ„๊นŒ์ง€์˜ ๊ฐ’์„ ์ด์šฉํ•˜๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ’€์ด O(n(n+1)/2) (๊ฐ€์šฐ์Šค ๋ง์…ˆ)
  2. ์•ž์˜ ๊ฐ’(inputList[j]) ์ค‘ ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด๋ฉฐ, ์ด์ „์— ์ €์žฅํ•ด๋†“์€ ์‚ฌ์ด์ฆˆ(len)๋ณด๋‹ค ํ˜„์žฌ ์‚ดํŽด๋ณด๋Š” ๊ฐ’(list[j])์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๋‹ค๋ฉด
  3. ์‚ฌ์ด์ฆˆ๋ฅผ ์ €์žฅํ•ด๋†“๊ณ , ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ(list[j])๋ฅผ ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์— ๋ณต์‚ฌํ•œ๋‹ค.
  4. ์ž‘์€ ๊ฐ’์ด๋ฉด์„œ, ๊ฐ€์žฅ ๊ธด ๊ธธ์ด์˜ ํ•˜์œ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ, ํ˜„์žฌ ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  5. ์ตœ์žฅ ๊ธธ์ด๊ฐ€ ๊ฐฑ์‹ ๋  ๋•Œ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ์–ตํ•ด๋†“๊ณ , ์ถœ๋ ฅํ•œ๋‹ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		int[] inputList = new int[N];
		int maxLen = 0;
		ArrayList<Integer> printList = new ArrayList<>();
		
		ArrayList<Integer>[] list = new ArrayList[N];
		for (int i = 0; i < N; list[i++] = new ArrayList<>());
		
		for (int i = 0; i < N; i++) {
			int v = Integer.parseInt(st.nextToken());
			inputList[i] = v;
			
			int len = 0;
			for (int j = 0; j < i; j++) {
				// ์•ž์˜ ๊ฐ’(inputList[j]) ์ค‘ ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด๋ฉฐ
				// ์ด์ „์— ์ €์žฅํ•ด๋†“์€ ์‚ฌ์ด์ฆˆ(len)๋ณด๋‹ค ํ˜„์žฌ ์‚ดํŽด๋ณด๋Š” ๊ฐ’(list[j])์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๋‹ค๋ฉด
				if(inputList[j] < v && len < list[j].size()) {
					// ์‚ฌ์ด์ฆˆ๋ฅผ ์ €์žฅํ•ด๋†“๊ณ 
					len = list[j].size();
					// ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ(list[j])๋ฅผ ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์— ๋ณต์‚ฌ
					list[i] = (ArrayList<Integer>) list[j].clone();
				}
			}
			list[i].add(v); // ํ˜„์žฌ ๊ฐ’ ์ถ”๊ฐ€
			if(maxLen < list[i].size()) {
				maxLen = list[i].size();
				// ์ตœ์žฅ ๊ธธ์ด ๊ฐฑ์‹  ์‹œ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ printList์— ๊ธฐ์–ต
				printList = list[i];
			}
		}

		StringBuilder sb = new StringBuilder();
		sb.append(maxLen + "\n");
		for(int e : printList) sb.append(e + " ");
		System.out.print(sb);
	}
}

 

[๊ฒฐ๊ณผ]


๋ฐฑ์ค€(BOJ) ๋ฌธ์ œ ์ค‘ [ 14002. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 4 ] ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

    '๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [๋ฐฑ์ค€][ํ”Œ๋ž˜ํ‹ฐ๋„˜ 5][LIS] 14003. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 5
    • [๋ฐฑ์ค€][๊ณจ๋“œ 1][๋ฐฑํŠธ๋ž˜ํ‚น] 1799. ๋น„์ˆ
    iknowDev
    iknowDev
    iknowDev ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ SSAFY 8๊ธฐ Java

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”