๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[SWEA] 5208.์ „๊ธฐ๋ฒ„์Šค2 - Java

category Algorithm/SWEA 2022. 11. 20. 16:22

๋ฌธ์ œ ์ ‘๊ทผ์ œํ•œ๋จ


1. ๋ฌธ์ œ ์š”์•ฝ

์ถฉ์ „์ง€๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์˜ ์ „๊ธฐ๋ฒ„์Šค๋ฅผ ์šดํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ •๋ฅ˜์žฅ์—๋Š” ๊ต์ฒด์šฉ ์ถฉ์ „์ง€๊ฐ€ ์žˆ๋Š” ๊ตํ™˜๊ธฐ๊ฐ€ ์žˆ๊ณ , ์ถฉ์ „์ง€๋งˆ๋‹ค ์ตœ๋Œ€๋กœ ์šดํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ฅ˜์žฅ ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค.

์ถฉ์ „์ง€๊ฐ€ ๋ฐฉ์ „๋˜๊ธฐ ์ „์— ๊ต์ฒดํ•˜๋ฉฐ ์šดํ–‰ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ต์ฒดํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๋ฉด ์ตœ์†Œํ•œ์˜ ๊ต์ฒด ํšŸ์ˆ˜๋กœ ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•ด์•ผ ํ•œ๋‹ค.

์ •๋ฅ˜์žฅ๊ณผ ์ถฉ์ „์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๊ตํ™˜ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ์‹œ์˜ค. ๋‹จ, ์ถœ๋ฐœ์ง€์—์„œ์˜ ๋ฐฐํ„ฐ๋ฆฌ ์žฅ์ฐฉ์€ ๊ตํ™˜ํšŸ์ˆ˜์—์„œ ์ œ์™ธํ•œ๋‹ค.

๋‹ค์Œ์€ 1๋ฒˆ์—์„œ ์ถœ๋ฐœ 5๋ฒˆ์ด ์ข…์ ์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ์ด๋‹ค.

์ •๋ฅ˜์žฅ 1 2 3 4 5
์ถฉ์ „์ง€ 2 3 1 1  

1๋ฒˆ์—์„œ ์žฅ์ฐฉํ•œ ์ถฉ์ „์ง€ ์šฉ๋Ÿ‰์ด 2์ด๋ฏ€๋กœ, 3๋ฒˆ ์ •๋ฅ˜์žฅ๊นŒ์ง€ ์šดํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 2๋ฒˆ์—์„œ ๋ฏธ๋ฆฌ ๊ต์ฒดํ•˜๋ฉด ์ข…์ ๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ •๋ฅ˜์žฅ์—๋Š” ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ์—†๋‹ค.

[์ž…๋ ฅ]

์ฒซ ์ค„์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 1<=T<=50

๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๋ณ„๋กœ ํ•œ ์ค„์— ์ •๋ฅ˜์žฅ ์ˆ˜ N, N-1๊ฐœ์˜ ์ •๋ฅ˜์žฅ ๋ณ„ ๋ฐฐํ„ฐ๋ฆฌ ์šฉ๋Ÿ‰ Mi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 3<=N<=100, 0 ๏ผœ Mi ๏ผœ N

[์ถœ๋ ฅ]

๊ฐ ์ค„๋งˆ๋‹ค "#T" (T๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฒˆํ˜ธ)๋ฅผ ์ถœ๋ ฅํ•œ ๋’ค, ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค

2. ํ’€์ด

1๋ถ€ํ„ฐ charge[idx] ๋งŒํผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ dfs๋ฅผ ๋Œ๋ฆฐ๋‹ค.

์ฒ˜์Œ์—๋Š” for๋ฌธ์„ ์“ฐ์ง€ ์•Š๊ณ  (+1)๊ณผ (charge[idx]) ๋‘ ๊ฒฝ์šฐ์—์„œ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ๊ต์ฒดํ•  ๋•Œ๋งŒ dfs๋ฅผ ๋Œ๋ ธ๋Š”๋ฐ

์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ ์šด์ข‹๊ฒŒ ํ…Œ์ผ€๋Š” ์ž˜ ๋‚˜์˜ค์ง€๋งŒ (+2) ~ (charge[idx]-1) ์—์„œ ๋ฐฐํ„ฐ๋ฆฌ ๊ต์ฒดํ–ˆ์„ ๊ฒฝ์šฐ๋Š” ์ƒ๊ฐํ•ด์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๋ช… ์˜ค๋‹ต์ด ๋‚˜์™”์„ ๊ฒƒ์ด๋‹ค.

3. ์ฝ”๋“œ

๋”๋ณด๊ธฐ
import java.io.*;
import java.util.*;

public class SW_5208_์ „๊ธฐ๋ฒ„์Šค2 {

	static int[] charge;
	static int N, ans;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		int T = Integer.parseInt(br.readLine());
		
		for (int tc=1; tc<=T; tc++) {
			st = new StringTokenizer(br.readLine());
			N = Integer.parseInt(st.nextToken());
			charge = new int[N-1];
			for (int n=0; n<N-1; n++) {
				charge[n] = Integer.parseInt(st.nextToken());
			}
			
			ans = Integer.MAX_VALUE;
			dfs(0,-1);
			System.out.println("#"+tc+" "+(ans));
		}
	}
	
	static void dfs(int idx, int cnt) {
		if (cnt > ans) return;
		
        if (idx >= N-1) {
            ans = Math.min(ans, cnt);
            return;
        }
        
        int max = charge[idx];
        for (int i=max; i>0; i--) {
            dfs(idx+charge[i], cnt+1);
        }
    }
}

4. ์‚ฌ๋‹ด

๋ถ€์กฑํ•˜๋‹ค.. ๋”ํ•ด๋ผ ๋”ํ•ด