다희의 코딩 성장일기
[정올 Begginer_Coder - 도형만들기1] 1339.문자삼각형2_자바JAVA 본문
문제 : 정올 1339.문자삼각형2
문제 링크 : www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2075&sca=2010
입출력
풀이
< 접근 방법 및 풀이 >
- 배열 인덱스는 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
설계하고 구현하니까 구현 시간이 엄청 짧았다.
설계하는데 넘 재밌었다.
'Algorithm > 정올' 카테고리의 다른 글
[정올 Begginer_Coder - 수학1] 1430.숫자의 개수_자바JAVA (0) | 2020.12.13 |
---|---|
[정올 Begginer_Coder - 수학1] 1692.곱셈_자바JAVA (0) | 2020.12.13 |
[정올 Begginer_Coder - 도형만들기1] 1338.문자삼각형_자바JAVA (0) | 2020.12.10 |
[정올 Begginer_Coder - 도형만들기1] 1314.문자사각형2_자바JAVA (0) | 2020.12.10 |
[정올 Begginer_Coder - 도형만들기1] 1307.문자사각형_자바JAVA (0) | 2020.12.10 |
Comments