DY N DY

실력키우기 문자삼각형1(JAVA) 본문

PARK/ALGORITHM

실력키우기 문자삼각형1(JAVA)

손세지 2016. 4. 12. 15:43

1338 : 문자삼각형1

제한시간: 1Sec    메모리제한: 64mb
해결횟수: 330회    시도횟수: 919회   



삼각형의 높이 N을 입력받아서 아래와 같이 문자 'A'부터 차례대로 왼쪽 대각선으로 채워서 삼각형 모양을 출력하는 프로그램을 작성하시오.


< 처리조건 > 
(1) 오른쪽 위부터 왼쪽 아래쪽으로 이동하면서 문자 'A'부터 차례대로 채워나간다.
(2) N번 행까지 채워지면 다시 오른쪽 둘째 행부터 왼쪽 아래로 채워나간다. 
(3) 삼각형이 모두 채워질 때까지 반복하면서 채워 나간다. (문자 'Z'다음에는 'A'부터 다시 시작한다.)


e3050b66a1b29a01767400d7560a4131_1449726
 

 

삼각형의 높이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.



주어진 형태대로 높이가 N인 문자삼각형을 출력한다. 
문자 사이는 한 개의 공백으로 구분한다.


 [Copy]
5
 [Copy]
        A
      B F
    C G J
  D H K M
E I L N O

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**************************************************************
    Problem: 1338
    User: a132034
    Language: Java
    Result: Success
    Time:462 ms
    Memory:18740 kb
****************************************************************/
 
 
import java.util.Scanner;
 
public class Main {
 @SuppressWarnings("resource")
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  int k,p;
  for(int i = 0 ; i < n; ++i)
  {
   k = n-1;
   p = 0;
   for(int j = 0; j < 2*(n-i-1); ++j)
    System.out.print(" ");
    
   for(int j = 0 ; j < i+1; ++j){
    System.out.printf("%c ",'A'+((i+p)%26));
    p += k--;
   }
   System.out.println();
  }
   
 }
}


종이에 패턴을 그려보면 대략 이렇다. 

5의 경우 

1번째 줄 : 공백 8칸 0

2번째 줄 : 공백 6칸 1 5

3번째 줄 : 공백 4칸 2 6 9

4번째 줄 : 공백 2칸 3 7 10 12

5번째 줄 : 공백 없음 4 8 11 13 14 

차례대로 보면 첫 번째는 i번째 줄일 경우 i번째 알파벳이 나오고 두번째는 i + (총 줄수 n - 1)번째 알파벳 

세번째에는 i + (n-1) + (n-2) 번째 알파벳 .... 순으로 나오게 된다. 

k에 각 줄마다 더해줄 줄 수를 n-1로 저장하고 p에 누적으로 k를 더해주며 출력한다. 

A~Z까지가 26개이므로 26으로 나눈 나머지를 'A'에 더해주면 알파벳 Z가 나온 후에 다시 A서부터 순서대로 나오게 된다.