๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 6193_Hungry Cows

๋ฟŒ์•ผ._. 2026. 1. 16. 10:35
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/6193)

< Hungry Cows >

 

๋ฌธ์ œ ํ’€์ด 

 

dp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ „์— ๋จน์ด๋ฅผ ๋จน์€ ์†Œ๋ณด๋‹ค ๋ฒˆํ˜ธ๊ฐ€ ๋” ํฐ ์†Œ๋งŒ ๋จน์ด๋ฅผ ๋จน์—ฌ ์ตœ๋Œ€ ๋จน์ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ์†Œ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

 

my solution (Java)

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

public class _6193_ { // Hungry Cows

	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 arr[] = new int[n];
		int idx = 0;
		int range = n / 20;
		if (n % 20 != 0) {
			range += 1;
		}

		for (int i = 0; i < range; i++) {
			st = new StringTokenizer(bf.readLine());
			while (st.hasMoreTokens()) {
				arr[idx++] = 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 (arr[j] < arr[i]) {
					dp[i] = Math.max(dp[i], dp[j] + 1);
				}
			}
		}

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

		System.out.println(result);
	}
๋ณ€์ˆ˜)
n : ์ž…๋ ฅ๊ฐ’ 
arr : ์†Œ ๋ฒˆํ˜ธ
dp : ๋จน์ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ์†Œ์˜ ์ˆ˜

 

n์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์†Œ ๋ฒˆํ˜ธ๋Š” ํ•œ ์ค„์— 20๊ฐœ์”ฉ ์ž…๋ ฅ๋˜๋ฏ€๋กœ 20์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค๋ฉด n/20 ๋งŒํผ, ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด n/20 +1๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›์•„ arr์— ์ €์žฅํ•œ๋‹ค. dp ์ดˆ๊ธฐ๊ฐ’์„ ๋‹ค 1๋กœ ์ €์žฅํ•œ๋‹ค. ๋ฐฐ์—ด์„ ์ „์ฒด ํƒ์ƒ‰ํ•˜๋ฉฐ ํ˜„์žฌ ์†Œ ๋ฒˆํ˜ธ๋ณด๋‹ค ์•ž์— ์žˆ๋Š” ์†Œ ๋ฒˆํ˜ธ๊ฐ€ ์ž‘๋‹ค๋ฉด +1 ํ•œ ๊ฐ’๊ณผ ํ˜„์žฌ ๊ฐ’ ์ค‘ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

 

์ตœ์ข… dp ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.