본문 바로가기
프로그래밍/알고리즘

1331: 문자마름모

by 카라미 2015. 4. 21.

1331: 문자마름모

시간제한: 1 Sec  메모리제한: 64 MB
제출: 407  해결: 96

마름모의 한 변의 길이 N을 입력받아 아래와 같이 문자마름모를 출력하는 프로그램을 작성하시오.

< 처리조건 >
(1) 첫 번째 행의 중앙부터 출발하여 시계 반대방향으로 'A'부터 차례대로 채워나간다. ('Z'다음에는 다시 'A'가 된다.)
(2) 바깥 부분이 다 채워지면 두 번째 행 중앙부터 다시 같은 작업을 반복한다.
(3) 같은 방법으로 마름모를 다 채워지도록 하여 출력한다.



마름모의 한변의 길이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.

주어진 형태대로 한변의 길이가 N인 문자마름모를 출력한다. 문자 사이는 한 개의 공백으로 구분한다.

4

      A
    B M L
  C N U T K
D O V Y X S J
  E P W R I
    F Q H
      G

<<해결 방법>>

앞에서 풀어봤던 사각형 달팽이와 비슷합니다.

마찬가지 반복횟수를 발견하는것이 중요합니다.

얼핏보면, A-D까지 4번, E-F까지 3번, H부터 J까지 세번

다음 K-L 2번, 다시 MNO 3번... 이렇게 생각하면 규칙이 살짝 복잡해짐을 느낄 수

있습니다. 생각을 더 많이 해야겠죠..

그래서 다시 A-C 까지 3번 D-F까지 3번, G-I까지 3번 J-L까지 3번

MN - OP - GR - ST 2번씩 반복 U - V - W - X 나머지 한 번 씩 반복. 그리고 마지막 Y

이렇게 규칙을 찾는것이 좋을거 같습니다.

그래서 처음 반복횟수는 n-1 부터 시작해서 반복횟수를 적절하게 줄어주면서 진행하면 됩니다.



char[][] arr = new char[count*2-1][count*2-1]; //값을 담을 배열..   마름모로 담다 보니 크기가 더 커야 합니다. 

int m = count-1;

int x=0,y=count-1;

char num = 'A';

while(m>0){

for(int i = 0; i < m; i++){ //왼쪽아래

arr[x++][y--]=num++;

}

for(int i = 0; i < m; i++){ //오른쪽아래

arr[x++][y++]=num++;

}

for(int i = 0; i < m; i++){ //오른쪽위

arr[x--][y++]=num++;

}

for(int i = 0; i < m; i++){ //왼쪽위

arr[x--][y--]=num++;

}

m--;

x++;

}

arr[count-1][count-1] = num; //마지막 Y를 담기위한 부분..  


이렇게 작성하면, 2차원 char배열에 마름모로 문자를 채울 수 있습니다.


제공하는 소스에는 앞에 예제인 사각형 달팽이를 작성하는 

메소드도 포함되어 있습니다.




'프로그래밍 > 알고리즘' 카테고리의 다른 글

1495: 대각선 지그재그  (0) 2015.04.21
1997: 떡 먹는 호랑이  (0) 2015.04.21
2074: 마방진  (0) 2015.04.21
1014: 돌다리 건너기  (0) 2015.04.21
1707: 달팽이사각형  (0) 2015.04.21