다희의 코딩 성장일기

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

Algorithm/정올

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

ilmiodiario 2020. 12. 10. 02:35

 

문제 : 정올 1338.문자삼각형

 

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

 

 

 

 

입출력

 

 

풀이

 

< 접근 방법 및 풀이 >

  • 알아보기 쉽게 배열 인덱스 1부터 시작. 행과 열값이 둘다 변화
  •  ex ) n = 5 일때,
  1 2 3 4 5
1         A
2       B  
3     C    
4   D      
5 E        

- 배열이 그려진 순서대로 행, 열을 나열해보면 다음과 같이 변화하는 걸 알 수 있다. / 대각선 모양으로 진행 

첫번째 -  A ( 1, 5)  B ( 2, 4) C ( 3, 3) D ( 4, 2) E ( 5, 1)

두번째 - F(2, 5)  G (3, 4 ) H ( 4, 3)  I (5, 2)

.

.

. 다섯번째 ~ 나머지 생략 

-> 즉, 총 반복은 크게 5번 반복하고, 행의 시작은 1부터 5까지, 열은 5열부터 ~ 1열까지

다만 반복하는 횟수가 첫번째는 5번 배열에 값을 집어 넣고, 두번째는 4번, 3번째는 3번 이렇게 줄어든다.

< 주의할 점 >

  • 배열은 널값(‘\0’, 0)으로 초기화 하고 출력할 때 널값인 경우 공백을 출력하면 된다.( 맞게 풀고 런타임 에러나서 한참 찾아봤는데 이런 출력 조건을 놓침..) 

 

JAVA코드

 

package 도형만들기1;

import java.util.Scanner;

public class 문자삼각형1_1338 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();

		char arr[][] = new char[n + 1][n + 1];

		char c = 'A';
		int k = 1;
		// 값 넣기
		for (int i = 1; i <= n; i++) { // n번 반복
			int r = i;
			for (int j = n; j >= k; j--) {
				arr[r][j] = c;
				c++;
				r++;
				if(c > 'Z') c = 'A';
			}
			k++;
		}

		// 출력
		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

 

 

200ms 나온 사람들은 어떻게 구현했을까,,?

더 열심히 해야지. 

Comments