📖문제
크기가 N인 파스칼의 삼각형을 만들어야 한다.
파스칼의 삼각형이란 아래와 같은 규칙을 따른다.
N이 4일 경우,
N을 입력 받아 크기 N인 파스칼의 삼각형을 출력하는 프로그램을 작성하시오.
🔍코드(Java)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int Tc = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= Tc; tc++) {
int N = Integer.parseInt(br.readLine());
System.out.println("#"+tc);
//임시공간을 하나만들고
int[] arr = new int[N];
//총 반복횟수(row)
for (int i = 0; i < N; i++) {
//한 row에서 몇칸을 이용할건지
int[] cal = new int[i+1]; //계산할만큼만 배열 생성
if(i==0) {
cal[i] = 1 ; //초기값 1넣기
}else {
for (int j = 0; j < i; j++) { // n번째 row 면 n칸만 계산하기.
for (int k = 0; k < 2; k++) { //내 칸과 내 다음칸에 나의 숫자를 넣어준다..
cal[j+k]+=arr[j];
}
}
}
// arr에 복사하기 & row 출력
for (int j = 0; j < cal.length; j++) {
//다음계산을 위하여 배열에 결과값 복사하기.
arr[j]=cal[j];
if(j==0) {
System.out.print(cal[j]);
}else {
System.out.print(" " + cal[j]);
}
}
System.out.println();
}
}//Tc
💡풀이
D2풀기 시작해서 처음으로 생각을 좀 하고 푼 문제였다..
어떤 숫자는 다음 row 에서 현재 내 칸과 그 다음칸에 영향을 미치고 덧셈한다고 생각하고 풀었다.
예를들어 N3
다른사람들의 풀이방법이 궁금해서 찾아보니, 2차원배열을 이용하였다(이마 탁!🤦♀️) 나는 파스칼의 삼각형을 순차적으로 그려나간다는 생각으로 숫자를 보내서 덧셈을 해줬다면 , 2차원 배열을 활용하는것은 이전 row 의 숫자를 가져와서 더하는 역발상의 방법이었다. 아 뇌가 말랑말랑해지는 느낌~