다음 다이어몬드 모양과 같이 출력되는 프로그램을 작성하라.
10-1. 해법 정리
1) 숫자를 입력 받아서 num 변수에 저장
2) 입력 받은 num이 20을 초과하거나 0이면 종료, 20이하면 프로그램 실행-위쪽 다이아몬드-
3) 인덱스 변수 i가 1부터 입력한 숫자까지 증가하는 반복문
4) 3) 반복문 안에서 공백을 표시할 또 다른 반복문 동작(j가 1부터 입력값-i 만큼 증가)
5) 3) 반복문 안에서 별을 표시할 또 다른 반복문 동작(k가 1부터 2*i-1만큼 증가)
6) 3) 반복문의 한 턴(turn)이 끝나면 한 줄을 띄워 주기
-아래쪽 다이아몬드-
7) 인덱스 변수 i가 num-1부터 1이 될 때까지 감소하는 반복문
8) 7) 반복문 안에서 공백을 표시할 또 다른 반복문 동작(j가 1부터 입력값-i 만큼 증가)
9) 7) 반복문 안에서 별을 표시할 또 다른 반복문 동작(k가 1부터 2*i-1만큼 증가)
10) 7) 반복문의 한 턴(turn)이 끝나면 한 줄을 띄워 주기
10-2. 풀이 과정
이 문제 또한 바로 해결되진 않았습니다. 10-1 해법 정리에서 정리한 대로의 결과를 도출해 내기까지 많은 시간이 소모되었습니다.
3을 입력했을 때, 표시되는 결과는 총 5줄입니다. 이에 착안해서, 위와 아래로 각각 나누어 풀이해 보려고 했습니다. 증가하는 쪽은 위쪽이라서 이것만 해결한다면 아래에 표시하는 부분은 금방 해결할 수 있을 거라는 생각을 했습니다.
<사진 설명> 먼저, 입력 받은 값이 어떤지 검사하는 과정은 생략하고 진행했습니다.
다이아몬드가 표시되는 위쪽의 별모양부터 구현해 보려고 했습니다. 그래서 일단 별모양이 보이기 전의 공백을 표시해야 하지만 스페이스 바로 표현되어 마우스로 드래그하지 않으면 얼마만큼 띄워졌는지 알 수 없었습니다.
<사진 설명> 공백 대신에 텅 빈 별모양으로 채워서 궁리한 끝에 다이아몬드의 위쪽을 만드는 데 성공했습니다. 공백의 크기를 num-1만큼 표현하고, 별 모양을 위에서부터 하나씩 증가시킨 모습입니다.
<사진 설명> 더 쉽게 알아보기 위해 줄이 어디에서 띄워졌는지 알 수 있도록 했습니다. 아직까지 제대로 된 다이아몬드와는 거리가 있습니다.
<사진 설명> 다이아몬드를 구성해야 할 별을 2배로 증가시켰더니, 해결에 근접할 수 있었습니다.
<사진 설명> 하지만 2배로 곱한 i는 별의 개수가 하나 많았습니다. 그래서 -1을 첨가해서 정상적으로 보기 좋게 만들었습니다.
<사진 설명> 아래쪽을 구현하기 위해 일단 위쪽 부분을 복사해 놓았습니다.
<사진 설명> 아래쪽의 구현에 성공한 모습입니다. 위쪽을 구현할 때 얻은 지식(공백, 별, 한 줄 띄우기)을 응용하여 금방 만들어 낼 수 있었습니다. 위 스크린샷에는 첫 루프문이 for(int i=num-1; i>=0; i--)라고 되어 있는데, 이 부분을 for(int i=num-1 ; i>0 ; i--)로 고쳐서 정상적으로 표현되게 할 수 있었습니다.
10-3. 소스 코드(Diamond.java)
10-4. 실행 화면
<사진 설명> 5를 입력했을 때 결과 화면
<사진 설명> 0을 입력했을
때, 종료되는 모습 <사진 설명> 1을 입력했을
때 단지 별 하나만 나타납니다 <사진 설명> 30을 입력했을
때, 20이하로 입력하라는 메시지가 나타나고, 동시에 종료됩니다. 10-5. 시행 착오 이번 문제는 시행 착오를 아주 많이 겪었습니다. 10-2의 풀이 과정에서도 보실
수 있듯이 처음에 얼마 만큼의 공백을 입력해야 하는지, 별 모양을
i*2-1만큼 입력해야 한다는 깨달음, 아래쪽을 구현할 때 위쪽과는 다르게 감소시켜야 하는
구문을 입력하면서 제법 많은 시간이 소모되었습니다.
'프로그래밍 실습 > 자바(Java)' 카테고리의 다른 글
| 나와 나의 가장 친한 친구의 이름과 학번, 주소, 전화번호 그리고 한달 용돈을 출력하는 프로그램을 작성하라. 또한, 한달 용돈은 내가 친구보다 얼마만큼 차이가 나는지 출력해 보라. (0) | 2010.05.13 |
|---|---|
| 다음 5명 학생들의 점수를 합산하고 평균과 석차를 구하여 출력하는 프로그램을 작성하라 (1) | 2010.05.13 |
| 3개의 한자리 숫자를 더한 값이 15가 될 때, 3개의 숫자를 모두 구하라 (0) | 2010.05.13 |
| InputStreamReader 사용하기 (0) | 2009.10.07 |
| InputStream 사용하기 (0) | 2009.10.07 |
