Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 문자삼각형1(JAVA) 본문
1338 : 문자삼각형1
제한시간: 1Sec 메모리제한: 64mb
해결횟수: 330회 시도횟수: 919회
삼각형의 높이 N을 입력받아서 아래와 같이 문자 'A'부터 차례대로 왼쪽 대각선으로 채워서 삼각형 모양을 출력하는 프로그램을 작성하시오.
< 처리조건 >
(1) 오른쪽 위부터 왼쪽 아래쪽으로 이동하면서 문자 'A'부터 차례대로 채워나간다.
(2) N번 행까지 채워지면 다시 오른쪽 둘째 행부터 왼쪽 아래로 채워나간다.
(3) 삼각형이 모두 채워질 때까지 반복하면서 채워 나간다. (문자 'Z'다음에는 'A'부터 다시 시작한다.)
[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서부터 순서대로 나오게 된다.
'PARK > ALGORITHM' 카테고리의 다른 글
문제은행 두 정수 더하기(A+B)(C++) (0) | 2016.04.13 |
---|---|
실력키우기 대각선 지그재그(JAVA) (0) | 2016.04.12 |
알고리즘 저글링 방사능 오염(JAVA) (0) | 2016.04.12 |
실력키우기 달팽이사각형(C++) (0) | 2016.04.12 |
알고리즘 색종이만들기(C++) (0) | 2016.04.11 |