[알고리즘|SWEA] 2005. 파스칼의 삼각형(D2) Java

영가이·2022년 7월 1일
0

[출처] 2005. 파스칼의 삼각형

📖문제
크기가 N인 파스칼의 삼각형을 만들어야 한다.
파스칼의 삼각형이란 아래와 같은 규칙을 따른다.

  1. 첫 번째 줄은 항상 숫자 1이다.
  2. 두 번째 줄부터 각 숫자들은 자신의 왼쪽과 오른쪽 위의 숫자의 합으로 구성된다.

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 의 숫자를 가져와서 더하는 역발상의 방법이었다. 아 뇌가 말랑말랑해지는 느낌~

profile
금융 IT서비스를 개발 및 운영하고있는 3년차 개발자입니다.

0개의 댓글