다희의 코딩 성장일기

[정올 Begginer_Coder - 도형만들기1] 1339.문자삼각형2_자바JAVA 본문

Algorithm/정올

[정올 Begginer_Coder - 도형만들기1] 1339.문자삼각형2_자바JAVA

ilmiodiario 2020. 12. 10. 02:54

 

문제 : 정올 1339.문자삼각형2

 

문제 링크 : www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2075&sca=2010

 

JUNGOL

 

www.jungol.co.kr

 

 

 

입출력

 

 

 

풀이

 

< 접근 방법 및 풀이 >

  • 배열 인덱스는 1부터, 열고정 행변화
  • 시작점은 정중앙이므로, n = 5 일때, 시작점은 ( n / 2 ) +1 이 이므로 3이다.
  •  3열부터 ~ 1열까지 값을 채워나가는데, 처음엔 1개, 두번째는 3개, 3번째는 5개 . . . 홀수개씩 배열에 값을 집어 넣는다. 

ex ) n = 5일 경우, 배열에 값이 들어가는 순서대로 행, 열을 그려보면 다음과 같다.

첫번째. (3, 3)   - 1개

두번째. (2, 2) ( 3, 2 ) ( 4, 2)   - 3개

세번째. (1, 1) ( 1, 2) ( 1, 3) ( 1, 4) ( 1, 5 )   - 5개 

 

=> 행(i) 은 시작점 3 부터 ~ 1로 작아지고, 열(j) 의 시작은 i부터 시작하고 고정이다.  

반복횟수는 홀수로 커지면서 배열에 값을 집어넣으므로 변수 k = 1, 로 초기화해서 k += 2; 씩 k값을 늘려줬다.

 

자세한건 코드 주석참고!

 

 

< 주의할 점 >

  • 주어진 형태대로 높이가 N인 문자삼각형을 출력한다. 문자 사이는 한 개의 공백으로 구분한다. 입력범위를 벗어나면 "INPUT ERROR"를 출력한다.

* 조건 잘 보고 출력하기.. N의 범위는 1이상 100 이하의 홀수  < 이 부분 안 봤다가 낭패봄..


 

JAVA코드

 

package 도형만들기1;

import java.util.Scanner;

public class 문자삼각형2_1339 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		char arr[][] = new char[n + 1][n + 1];
		
		//입력 범위 아웃시
		if(n % 2 == 0 || n <= 0  || n > 100) {
			System.out.println("INPUT ERROR");
			return;
		}
		
		char c = 'A';
		int cnt = (n / 2) + 1; //시작점은 정 가운데.
		
	
		// 값 넣기
		for (int i = cnt, k = 1; i > 0; i--, k +=2) { // k = 1, 3, 5, 7, .. 홀수
			for (int j = i; j < i+k ; j++) {  
			arr[j][i] = c++; //열고정 행 변화. j가 변화 
			if(c > 'Z') c = 'A';
			}	
		}

		// 출력
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if(arr[i][j] == '\0') arr[i][j] = ' '; // ** 널값 처리 주의하기!
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}
}

 

REVIEW

 

 

 

설계하고 구현하니까 구현 시간이 엄청 짧았다.

설계하는데 넘 재밌었다.

Comments