-
재귀함수 / 1953 : (재귀함수) 삼각형 출력하기 1 / JAVA알고리즘/코드업 2020. 4. 14. 21:21
문제 설명
n이 입력되면 다음과 같은 삼각형을 출력하시오.
예)
n 이 5 이면
*
**
***
****
*****
이 문제는 반복문 for, while 등을 이용하여 풀수 없습니다.
금지 키워드 : for while goto
입력
길이 nn이 입력된다.(1<=n<=150)(1<=n<=150)
출력
삼각형을 출력한다.
입력 예시
3
출력 예시
*
**
***
나의 풀이
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class No1953_PrintTriangle1 { public static void recursive(int start, int end, int n) { if(start == n) return; else { if(start == end) { start = 0; end += 1; System.out.println(); } System.out.print("*"); recursive(start+1, end, n); } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); recursive(0, 1, n); } }
문제 분석
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class No1953_PrintTriangle1 { public static void recursive(int i, int n) { if(n == 1) return; else { if(n == i) { i = 0; n -= 1; System.out.println(); } System.out.print("*"); recursive(i+1, n); } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Character.getNumericValue(br.read()); recursive(0, n); } }
30분이라는 시간 내에 못풀었다. 처음에는 위와 같이 접근하였다.
위의 풀이는 별이 역삼각형으로 찍히게 되어있다.
역삼각형까지는 나오는데 정삼각형은 왜 나오지 않는걸까?
많은 사람들이 해답으로 매개변수를 3개를 사용하거나 함수를 두번 사용하여 풀이하였다.
함수를 한번만 사용하고 매개변수도 2개로만은 방법이 없을까?? 나중에 한번 시도해 보아야 겠다.
추가적으로 오랜만에 코드업 문제를 풀어서 그런지 BufferedReader() 사용시 int형 값을 받을때 readLine()으로 받아야 한다는 사실을 잊고 있었다. 위의 코드로는 어떤 값을 입력하더라도 앞의 한글자만이 들어가게 되어있어서 10 이상의 숫자 입력시 오류가 나고 있었다. 다음부터 주의하자!