포스팅 OS : Mac

검색어 : 자바(Java), 배열(Array), 마름모(Diamond)




오늘은 자바 기초 공부를 위해 배열을 사용해 입력받은 정수에 따라 점점 커지는 마름모 그리는 방법에 대해 포스팅합니다.


이 마름모 그리기는 자바를 처음 공부하기 시작했을 때 많이들 접하는 문제인데 사실 정답은 없는 문제입니다. 여기서 정답이 없다는 것이 무슨 뜻이냐면 어떤 소스가 되었던 마름모만 그려지면 된다는 것을 의미합니다. 제가 작성한 소스가 정답은 아니라는 거죠. 누군가는 저 소스보다 더 간단하고 쉽게 마름모를 그릴 수도 있습니다. 


잠깐 잡담을 하고 가자면 개발은 본업으로 삼고 몇년째 이일을 하고 있지만 잘짜여진 소스가 일하는데 있어서 크게 중요한 것은 아닙니다. 물론 머리 좋은 사람이 보기 쉽고 짧게 작성해 놓은 소스라면 더 좋겠지만 프로젝트를 진행해나감에 있어서 일단 목표했던 기능이 제대로 구현되고 있는지가 먼저라고 생각합니다. 당연히 이것은 제 개인적인 생각입니다. 제 스타일은 그렇거든요. 일단 기능 구현 후 차차 소스를 정리해나가는 타입입니다. 처음부터 정리된 소스를 추구하는 분들도 있고 저같은 사람도 있습니다. 스타일은 중요하지 않습니다. 이 마름모 소스와 마찬가지로 뭐로 가든 일단 마름모만 그려지면 됩니다.


왜 이 긴 잡담을 했냐면 이 글을 보시는 여러분이 본인 스스로 만든 마름모 소스와 제 소스의 방법이 다르다 해서 저게 맞고 이게 틀리다 혹은 이게 맞고 저게 틀리다가 아니라는 것을 말하고 싶었습니다. 더 좋은 방법을 쓴 좋은 소스가 있다면 그것을 자신의 것으로 흡수하여 자유자재로 사용할 수 있게 제대로 소화하기만 하면 됩니다. 


잡담은 여기까지 하고 마름모 그리기 소스를 보시겠습니다. 소스에 대한 설명은 주석으로 간략하게 달아 놓았습니다. 설명을 주저리주저리 길게 써봤자 본인들 실력엔 도움이 되지 않습니다. 주석을 보고 이해가 안되는 점은 소스를 차근차근 분석해서 생각해보세요. 그 과정이 본인의 실력을 늘리는 피와 살이 됩니다.


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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.Scanner;
 
public class Diamond {
 
    public static void main(String[] args) {
        /* 마름모 그리기 */    
    
        System.out.println("숫자를 입력해주세요.");
        Scanner input = new Scanner(System.in);
        
        int answer;                    // 입력받은 정수
        int center;                    // 가운데 행
        
        // 스캐너로 정수 입력 받기
        answer = input.nextInt();   
        
        // 입력받은 정수를 가공하여 마름모가 그려질 가로, 세로 길이 구하기
        answer = answer * 2 + 1;
        
        // 가운데 행 위치 지정
        center = answer/2;
        
        // 가공한 정수를 배열 생성에 사용
        char[][] dia = new char[answer][answer]; 
        
        int start = center;    // 점을 찍을 시작 지점
        int end = center;      // 점을 찍을 종료 지점
        
        // 마름모 생성
        for(int a=0 ; a < answer ; a++){
            for(int b=0 ; b < answer ; b++){
                if(start <= b && b <= end) {
                    dia[a][b] = '*';
                }else {
                    dia[a][b] = ' ';
                }
            }
            
            // 중간에서 점 찍는 위치 반전
            if(a < center) {
                start--;
                end++;
            }else {
                start++;
                end--;
            }
        }
        
        // 마름모 배열 출력
        for(int a=0 ; a < answer ; a++){
            for(int b=0 ; b < answer ; b++){
                System.out.print(dia[a][b]);
            }
            System.out.println();
        }
    }
}
cs



위 소스를 실행하면 아래와 같이 마름모가 그려집니다.

(왼쪽 상단에 숫자는 입력한 정수 입니다.)






다음 포스팅은 점점 커지는 별 그리기 포스팅을 하도록 하겠습니다.


+ Recent posts