티스토리 뷰
안녕하세요! 이번시간에는 반복문 조건문을 이용해서 어떤 특정한 수열을 나타내주는 프로그램을 만들어 볼겁니다!! 갑작스럽게 이런 프로그래밍을 하여서 많이 당황하셨죠?? 예시를 보여드립니다!
1~15까지 숫자를 입력받아서 피라미드 식으로 출력하는 프로그래밍을 할거에요 예시를 보여드리겠습니다 !
위 피라미드는 '15'를 입력받아 출력된 화면입니다. 이런식으로 나타내기 위해선 어떻게 해야할까요?? 먼저 숫자만 출력하는것을 생각해봅시다
1
212
32123
4321234
이런식으로 나타내기 위해서는 행과 열 둘다 반복문을 사용해야 될것인데요 행은 입력한 숫자만큼 반복문을 돌리면 될것인데 문제는 열의 개수가 홀수개가 나와야한단 것 입니다. 1번째행은 1열 2번째행은 3열 3번째행은 5열 헉 이건 수열인데요???
그럼 n번째 행은 몇열일까요?? 맞습니다!! 2n-1열 이 되겠습니다 그렇다면 대략적인 청사진은 그려지는듯 합니다. 먼저그럼 숫자 출력부터 해 봅시다!!
먼저 입력을 받아야하기때문에 import java.util.Scanner; 를 맨앞줄에 추가 해 줍니다.
위에서 말한 것 처럼, 행은 입력받은 number수만큼으로, 열은 2i-1개만큼으로 작성 하였습니다. 그랬더니 우리가 만드려고하는 행과 열의 갯수는 정해 졌군요!! 그런데 아직 다음 단계가 남아 있습니다. 1행은 1, 2행은 212, 3행은 32123 4행은 4321234 ....
n형은 n n-1 n-2 .... 1 2 3 .... n-1 n 이런식으로 숫자가 출력이 되야합니다. 그렇게 하기 위해선 어떻게 해야할까요... 흠 먼저 안의 for 문에 출력을 할 변수를 생각해봅시다. 첫 숫자만 생각을 해보면 1행은1, 2행은2, 3행은3,... ,n행은n 이 출력이 되야겠지요 그렇다면 i를 출력하면 될까요?? 그런데 i의 값을 for문안에서 변화를 시키면 i로 반복이 되는 반복문은 무한루프가 될 수도 있겠군요.. 그렇다면 i=value로 해서 i의 값을 받고 value를 출력하는것은 어떤가요? 그런데 받고나서 1을 만날때까지 작아져야 겠지요?? .. 여기서 또 고민입니다. until(meet 1)이라고 적으면 좋을텐데요.. ㅜ.ㅜ 그렇다면 다시 생각을 해봅시다 우리는 이제
1
222
33333
....
까지 출력을 하였습니다. 그런데 여기서 1까지 1만큼 작아졌다가 다시 1만큼 증가 해야합니다. 언제까지 작아지는지 볼까요?? 1행은 1만 출력됨으로 skip하시고, 2행은 2열전까지 3행은 3열전까지 작아지는군요!! 그렇다면 n열은 ?? 당연이 n열 전까지 작아지네요!! 아하 드디어 메커니즘을 찾았군요 그렇다면, i행 에서 (j<i)일때까지는 value의 값은 1씩감소시키고, 아닐때는 1씩증가를 시켜서 value를 출력하면 되겠습니다 한번 코드를 보시죠!
이렇게 작성을 하면 저희들이 원하는 코드를 얻을수있습니다!!! 이제 마지막 띄어쓰기 만 남았군요... 띄어쓰기는 어떻게하면될까요?? 대충 때려맞추면 될까요?? ㅜㅜㅜ 한번 보시죠
5를 입력하여 얻은 결과 입니다. 후후.. 이렇게 출력이 되는 군요! 그런데 1행의 1은 어디까지 가야할까요?? 8번 오른쪽으로 가야하네요! 2행은 오른쪽으로 얼마나 가야할까요?? 맞습니다! 6번 가야합니다! 3행은요? 4번이네요! 4행은 2번이군요!
대충 규칙이 보이십니까? n을 입력했을시 n-1행은 오른쪽으로 2번, n-2행은 4번.... 1행은 (n-1)*2번 이동해야하는군요! 그렇다면 int space=(number-1)*2로 두어서 2씩 감소시키면서 띄어쓰기를 출력하면되겠습니다. for(s=0; s<space; s++)를 이용하고 for 문 마지막에는 2칸씩 감소해야 함으로, space= space-2 로 적어 봅시다!
이렇게 작성을 해보았습니다! 그래서 5를 집어 넣어 실행을 해보니~~~
이렇게 아름답게 실행이 되는군요!!! 우왘 후후후 우리가 고생했던 결실이 보이는 듯 합니다 !
그렇다면 한번 10을 입력해볼까요??
10을 출력했던것을 보니... 조금 모양이 아랫칸이 이상합니다.. ㅜㅜ 이렇게 무너지는 겁니까.. ㅜㅜ 한번 11, 12 까지 출력을 해봅시다.
어떤가요? 10,11,12를 출력해보았더니 뭔가 빛이 보이지 않습니까?
안보이신다구요? 다시한번보세요 1을 기준으로 보시면 금방 보이실 겁니다! 만약 number가 10 이상일경우 number=12를 예를 들면 그바로 위의 11행은 1칸 오른쪽으로 가면되고 10행은 2칸, 9행부터 1행까지는 각각 3칸을 이동하면 됩니다. number=11인경우는 어떤가요 10행은 1칸 9행부터 1행까지는 2칸이군요, number = 10인 경우는 9행부터 1행까지는 1칸씩만 이동하면 되네요 뭔가 감이 잡히십니까?
만약 number>=10이라면,9행부터 1행은 number-9만큼 오른쪽으로 이동해야하고 10행부터 number-1행까지는 각각 number-행 만큼 띄어쓰기를 실행하면 되겠습니다!
즉 number=12일경우 10행은 12-10만큼 2칸 띄어야 하는 셈이죠 그렇다면 앞에 if문과 반복문을 이용하여 띄어쓰기를 사용 하면 되겠습니다. 이제 끝이 보이는군요. 하하하
이코드만 for문안에 넣게된다면 아름답게도 위에서보신 프로그램을 실행하실수 있을 겁니다 고생많으셨습니다 ㅎㅎㅎ 다시한번 보시고 혹시 다른 좋은방법이 생각나시거나 오류가 있다면 코멘트 부탁드립니다 감사합니다
'Java 공부일지' 카테고리의 다른 글
| Palindrome 판단 프로그램 (0) | 2018.04.01 |
|---|---|
| 컴퓨터와 가위바위보 하기! (0) | 2018.03.27 |
| 정적멤버 (0) | 2018.03.16 |
| 같은크기의 Box인지 확인하기 (0) | 2018.03.16 |
| 메소드에서 객체반환하기 (0) | 2018.03.16 |
