λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm

[λ°±μ€€] 17478번: μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?(μž¬κ·€)

by 주발2 2020. 3. 10.
λ°˜μ‘ν˜•

https://www.acmicpc.net/problem/17478

 

17478번: μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?

ν‰μ†Œμ— μ§ˆλ¬Έμ„ 잘 λ°›μ•„μ£ΌκΈ°λ‘œ 유λͺ…ν•œ μ€‘μ•™λŒ€ν•™κ΅μ˜ JH κ΅μˆ˜λ‹˜μ€ ν•™μƒλ“€λ‘œλΆ€ν„° μž¬κ·€ν•¨μˆ˜κ°€ 무엇인지에 λŒ€ν•˜μ—¬ λ§Žμ€ μ§ˆλ¬Έμ„ λ°›μ•„μ™”λ‹€. 맀번 μ§ˆλ¬Έμ„ 잘 λ°›μ•„μ£Όμ…¨λ˜ JH κ΅μˆ˜λ‹˜μ΄μ§€λ§Œ κ·ΈλŠ” μ€‘μ•™λŒ€ν•™κ΅κ°€ μžμ‹ κ³Ό λ§žλŠ”κ°€μ— λŒ€ν•œ 고민을 항상 ν•΄μ™”λ‹€. μ€‘μ•™λŒ€ν•™κ΅μ™€ μžμ‹ μ˜ 길이 λ§žμ§€ μ•Šλ‹€κ³  μƒκ°ν•œ JH κ΅μˆ˜λ‹˜μ€ κ²°κ΅­ μ€‘μ•™λŒ€ν•™κ΅λ₯Ό λ– λ‚˜κΈ°λ‘œ κ²°μ •ν•˜μ˜€λ‹€. λ– λ‚˜κΈ° μ „κΉŒμ§€λ„ μ œμžλ“€μ„ μƒκ°ν•˜μ…¨λ˜ JH κ΅μˆ˜λ‹˜μ€ μž¬κ·€ν•¨μˆ˜κ°€ 무엇인지 λ¬Όμ–΄λ³΄λŠ” 학생듀을 μœ„ν•œ μž‘μ€ μ„ λ¬Όλ‘œ μžλ™ 응닡 챗봇을 μ€€λΉ„

www.acmicpc.net

μ½”λ“œ

import java.util.Scanner;

public class Main {
	static String underBar = "";
	static String sArr[];
	
	public static void recursive(int num) {
		String temp = underBar;
		
		/*
		 * μž¬κ·€ μ’…λ£Œ 쑰건 - Base Case
		 *  __ ... __"μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?"
		 *  __ ... __"μž¬κ·€ν•¨μˆ˜λŠ” 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λΌλ„€"
		 *  __ ... __라고 λ‹΅λ³€ν•˜μ˜€μ§€.
		 */
		if(num == 0) {
			System.out.println(temp + sArr[0]);
			System.out.println(temp + sArr[4]);
			System.out.println(temp + sArr[5]);
			return;
		}
		
		for(int i=0; i<4; i++)	// μž¬κ·€ν˜ΈμΆœν•˜λ©΄μ„œ λ°˜λ³΅λ˜λŠ” λ„€κ°œμ˜ λ¬Έμž₯ 
			System.out.println(temp + sArr[i]);
		
		underBar += "____";	// 호좜될 λ•Œ λ§ˆλ‹€ 밑쀄이 2κ°œμ”© 증가.
		recursive(num-1);
		
		// μž¬κ·€κ°€ μ’…λ£Œλ˜κ³    라고 λ‹΅λ³€ν•˜μ˜€μ§€. <-- λΆ€λΆ„
		System.out.println(temp + sArr[5]);
	}

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int N = scan.nextInt();
		System.out.println("μ–΄λŠ ν•œ 컴퓨터곡학과 학생이 유λͺ…ν•œ κ΅μˆ˜λ‹˜μ„ μ°Ύμ•„κ°€ λ¬Όμ—ˆλ‹€.");
		
		sArr = new String[6];
		for(int i=0; i<sArr.length; i++)
			sArr[i] = "";
		sArr[0] = "\"μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?\"";
		sArr[1] = "\"잘 λ“€μ–΄λ³΄κ²Œ. μ˜›λ‚ μ˜›λ‚  ν•œ μ‚° κΌ­λŒ€κΈ°μ— 이세상 λͺ¨λ“  지식을 ν†΅λ‹¬ν•œ 선인이 μžˆμ—ˆμ–΄.";
		sArr[2] = "λ§ˆμ„ μ‚¬λžŒλ“€μ€ λͺ¨λ‘ κ·Έ μ„ μΈμ—κ²Œ μˆ˜λ§Žμ€ μ§ˆλ¬Έμ„ ν–ˆκ³ , λͺ¨λ‘ μ§€ν˜œλ‘­κ²Œ λŒ€λ‹΅ν•΄ μ£Όμ—ˆμ§€.";
		sArr[3] = "그의 닡은 λŒ€λΆ€λΆ„ μ˜³μ•˜λ‹€κ³  ν•˜λ„€. 그런데 μ–΄λŠ λ‚ , κ·Έ μ„ μΈμ—κ²Œ ν•œ μ„ λΉ„κ°€ μ°Ύμ•„μ™€μ„œ λ¬Όμ—ˆμ–΄.\"";
		sArr[4] = "\"μž¬κ·€ν•¨μˆ˜λŠ” 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λΌλ„€\"";
		sArr[5] = "라고 λ‹΅λ³€ν•˜μ˜€μ§€.";
		recursive(N);
		scan.close();
	}

}

풀이

좜λ ₯μ—μ„œ λ°˜λ³΅λ˜λŠ” 뢀뢄은 λ„€ 개의 λ¬Έμž₯이닀.

"μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?"

"잘 λ“€μ–΄λ³΄κ²Œ. μ˜›λ‚ μ˜›λ‚  ν•œ μ‚° κΌ­λŒ€κΈ°μ— 이세상 λͺ¨λ“  지식을 ν†΅λ‹¬ν•œ 선인이 μžˆμ—ˆμ–΄.

λ§ˆμ„ μ‚¬λžŒλ“€μ€ λͺ¨λ‘ κ·Έ μ„ μΈμ—κ²Œ μˆ˜λ§Žμ€ μ§ˆλ¬Έμ„ ν–ˆκ³ , λͺ¨λ‘ μ§€ν˜œλ‘­κ²Œ λŒ€λ‹΅ν•΄ μ£Όμ—ˆμ§€.

그의 닡은 λŒ€λΆ€λΆ„ μ˜³μ•˜λ‹€κ³  ν•˜λ„€. 그런데 μ–΄λŠ λ‚ , κ·Έ μ„ μΈμ—κ²Œ ν•œ μ„ λΉ„κ°€ μ°Ύμ•„μ™€μ„œ λ¬Όμ—ˆμ–΄."

μœ„ λ„€ λ¬Έμž₯이 λ°˜λ³΅λ˜λ―€λ‘œ, μž¬κ·€ν˜ΈμΆœμ„ ν•˜λ©΄μ„œ κ³„μ†μ μœΌλ‘œ 좜λ ₯ν•œλ‹€.

μž¬κ·€κ°€ ν•œλ²ˆμ”© 호좜될 λ•Œ λ§ˆλ‹€ 언더바(_) λŠ” 4κ°œμ”© μ¦κ°€ν•˜λ―€λ‘œ ____ 4κ°œμ”© 더해쀀닀.

 

 

μž¬κ·€ν˜ΈμΆœμ˜ μ’…λ£Œμ‘°κ±΄(Base case, 기저사둀)λŠ” μ„Έ λ¬Έμž₯이닀.

________"μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?"

________"μž¬κ·€ν•¨μˆ˜λŠ” 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λΌλ„€"

________라고 λ‹΅λ³€ν•˜μ˜€μ§€.

λ”°λΌμ„œ 주어진 n이 0μ΄λμ„λ•Œ, μœ„ λ¬Έμž₯을 좜λ ₯ν•΄μ£Όκ³  return 을 톡해 μž¬κ·€ν•¨μˆ˜ μ’…λ£Œ.

 

 

κ·Έ ν›„ λ§ˆμ§€λ§‰ 남은 λ¬Έμž₯

____라고 λ‹΅λ³€ν•˜μ˜€μ§€.

라고 λ‹΅λ³€ν•˜μ˜€μ§€.

은 μž¬κ·€ν˜ΈμΆœμ΄ μ’…λ£Œλœ 이후에 좜λ ₯ν•˜λ―€λ‘œ, μž¬κ·€ν•¨μˆ˜μ˜ λ§ˆμ§€λ§‰μ— 좜λ ₯ν•œλ‹€.

ν‹€λ ΈμŠ΅λ‹ˆλ‹€λŠ” 언더바가 2κ°œμ”© λ”ν•΄μ§€λŠ” 쀄 μ•Œκ³  2κ°œμ”© λ”ν–ˆλ‹€κ°€ 틀리닀고 λ‚˜μ˜΄..

 

 

μ™€μš° μ΄λ¬Έμ œκ°€ μž¬κ·€ν•¨μˆ˜μ— λŒ€ν•΄ μ΄ν•΄ν•˜κΈ° 쒋은 문제라고 ν•΄μ„œ ν’€μ–΄λ΄€λŠ”λ° μ‘°κΈˆμ€ μž¬κ·€μ— λŒ€ν•΄ κ°€κΉŒμ›Œμ§„ 것 κ°™λ‹€.

μ΄λ¬Έμ œλŠ” μ•„λ‹ˆμ§€λ§Œ, μž¬κ·€ν•¨μˆ˜μ˜ μ½”λ“œλ₯Ό ν’€μ–΄λ‚Έ μ‚¬μ΄νŠΈκ°€ μžˆμ–΄μ„œ μ°Έκ³ ν•˜λ©΄μ„œ ν’€μ—ˆλ‹€. μ—¬κΈ°<

내일은 ν•˜λ…Έμ΄μ˜νƒ‘ 풀어봐야겠따 ~

λ°˜μ‘ν˜•

λŒ“κΈ€