반응형
문제
정사각형의 한 변의 길이 n을 입력받은 후 다음과 같은 문자로 된 정사각형 형태로 출력하는 프로그램을 작성하시오.
< 처리조건 >
문자의 진행 순서는 맨 오른쪽 아래에서 위쪽으로 'A'부터 차례대로 채워나가는 방법으로 아래 표와 같이 왼쪽 위까지 채워 넣는다.
'Z' 다음에는 다시 'A'부터 반복된다.
입력형식
정사각형 한 변의 길이 n(n의 범위는 1이상 100 이하의 정수)을 입력받는다.
출력형식
위의 형식과 같이 한변의 길이가 n인 문자 사각형을 출력한다. 문자 사이는 공백으로 구분하여 출력한다.
배열을 사용하지 않고 풀려하다보니 시간이 좀 걸렸다.
배열을 사용한다면 더 간단히 풀 수 있을 것으로 생각된다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
char ch = 'A';
/*
* 알파벳의 갯수 : 26개 -1을 하여, 범위의 마지막 문자 탐색 ex) n=6 일때 J 출력
*/
ch = (char) ('A' + ((n * n) % 26) - 1);
for (int i = 0; i < n; i++) {
if (ch - i < 'A') { // 범위를 벗어난 ch에 대한 조건문
ch = (char) ('Z' + i); // ch-i = i행 첫글자, 이 첫 글자가 범위 밖일때,
// ex) 0행 첫글자 = A 이라면, 1행 첫글자 = Z가되어야 한다.
// 이와같이 ch을 초기화 해준다면 밑의 temp를 설정할때 범위를 벗어나지 않는다.
}
char temp = (char) (ch - i); // 문제의 출력을 만족하기 위한 마지막 문자로 시작
// 다음행의 첫글자는 마지막행은 -i 이다.
// ex) n=6 일때, J 아랫글자는 I 이다.
for (int j = 0; j < n; j++) {
System.out.print(temp + " ");
temp -= n % 26; // 행 단위 출력 ex) n=6 일때, J 바로 우측은 D 이다.
// n 단위 만큼의 차이 j 와 d 의 차이는 6 이다.
if (temp < 'A') {
temp += 26; // 알파벳 갯수 26개 만큼 한정 시키기 위한 조건문
}
}
System.out.println(); // 개행
}
}
}
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2071&sca=2010
반응형
'Algorithm > 문제 풀이' 카테고리의 다른 글
[JUNGOL_2809 - JAVA] 약수 (0) | 2020.01.25 |
---|---|
[JUNGOL_1337 - JAVA] 달팽이삼각형 (0) | 2020.01.25 |
[JUNGOL_1303 - JAVA] 숫자사각형1 (0) | 2020.01.25 |
[JUNGOL_1341 - JAVA ] 구구단2 (0) | 2020.01.25 |
[JAVA]최대공약수와 최소공배수 - 프로그래머스 (1) | 2019.06.25 |