공부하기/백준

[Java] 백준 풀기 2440 - 별 찍기 3

XEV 2023. 1. 25. 22:44

자바 백준 2440번

브론즈 4

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

 

2440번: 별 찍기 - 3

첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제

www.acmicpc.net

 

 

 

 

 

 

문제 보기

분류: 구현

 

 

 

 

 

문제 풀기

https://xcevor.tistory.com/223

 

[Java] 백준 풀기 2438 - 별찍기 1

자바 백준 2438번 브론즈 5 https://www.acmicpc.net/problem/2438 2438번: 별 찍기 - 1 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 www.acmicpc.net 문제 보기 분류: 구현 문제 풀기 재

xcevor.tistory.com

기존 별 찍기 1 의 연장선 문제로 이전 문제 또한 재귀 함수를 이용하여 풀이하였기에 그 특성을 이해하여 쉽게 해결할 수 있었다.

 

별 찍기 1 의 경우 별을 먼저 찍고 재귀 함수에 진입을 한다면 이번 문제 별 찍기 3 에서는 재귀 함수에 먼저 진입을 하고 base case 를 만나 return 되어 겹겹이 들어갔던 재귀 함수를 하나씩 빠져나오면서 그 별의 개수를 출력한다.

따라서 가장 많은 별을 먼저 출력하고 재귀 함수를 되돌아 나와 이전에 저장된 하나 적은 개수의 별을 순차적으로 출력해 나오게 되고 마지막에 한 개의 별을 찍고 마무리된다.

 

코드상으로 별 찍기 1 과 비교했을 때, 출력 부분과 재귀 함수 부분의 순서만 바뀌었다.

    fnRecursiveStar(count + 1, star);
    System.out.println(star);
    

 

 

 

 

코드 보기

import java.util.Scanner;
 
public class Main {
    
    public static Scanner sc = new Scanner(System.in);
		
	static int numStar = sc.nextInt();
 
 
	public static void main(String[] args) {
		
		int count = 0;
		String star = "";
		
		fnRecursiveStar(count, star);
		
	}
	
	
	public static void fnRecursiveStar(int count, String star) {
	    
	    if (numStar == count) {
	        return;
	    }
	    
	    star = star + "*";
	    
	    fnRecursiveStar(count + 1, star); // base case 조건문으로 인해 return 되고 난 후 재귀 함수를 되돌아 나옴.
	    
	    System.out.println(star); // 매번 재귀 함수를 되돌아 나오고 별을 출력. 많은 별부터 1개 순서로 출력됨.
	    
	}
 
 
}