-
중첩 for문, 다양한 별 찍기, 삼각형 찍기Java/조건문 & 반복문 2020. 10. 23. 15:57
중첩 for문이란, for문 안에 또 다른 for문을 포함시키는 것이 가능하고, 중첩 횟수에는 제한이 없다.
보통 for문을 이해하기 위해서 별찍기가 예로 들어지기 때문에, 별찍기를 통해서 for문을 이해해보도록 할 것이다.
8행 15열의 별 '★'을 어떻게 해야될까?
★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★
가장 간단하게 별을 찍는 방법은 System.out.println("★★★★★★★★★★★★★★★");
이 문장을 아래와 같이 15번 반복해서 실행하면 별을 찍을 수 있다.
하지만, for문을 이용하면 동일하게 반복되는 System.out.ptintln("★★★★★★★★★★★★★★★"); 이 코드를 현저하게 줄일 수 있다.
for문을 이용해서 코드를 간단하게 바꿀수 있다.
for문으로 별 찍기
for (int i = 1; i <= 8; i++ ) {
System.out.println("★★★★★★★★★★★★★★★");
}
위의 코드는 for문 하나를 사용해서 println( )으로 15개의 별을 찍고 줄바꿈을 한뒤, i가 증가되는 횟수에 맞춰서 실행디되어 찍히는 모습이다.
중첩 for문
이 코드를 중첩 for문을 이용해서 2중 for문으로 별을 찍어보도록해 볼 것이다.
삼각형 별찍기 1
이번에는 아래와 같은 삼각형 모양의 별을 출력해보도록 할 것이다.
★
★★
★★★
★★★★
★★★★★
★★★★★★
★★★★★★★
위의 그림처럼 별을 찍으려면 어떻게 해야 될까?
가로의 모습을 보면 ★이 한 개씩 증가하고있는 걸 확인할 수 있다. 총 7개의 줄이 찍히고, 별은 각 줄이 찍힐 때 마다 1개씩 증가하고 있다.
아래의 코드를 살펴보자.
바깥의 for문에서는 7번을 반복해야되기 때문에 'i <= 7' 조건을 잘 지정해줬다.
하지만, 안의 for문에서 ★을 찍을 때 조건문에서 'j <= 7'로 지정을 해서 ★이 계속해서 7개씩찍히는 모습을 확인할 수 있다. 그렇다면 어떻게 하면 위의 모습대로 별이 하나 씩 증가하면서 찍힐 수 있을까?
바깥의 for문은 1씩 증가한다. 안에 for문에서 j의 값이 바깥의 i보다 같거다 작아야 될 것이다. i의 값이 1일 때 안의 j도 같거나 작아서 ★이 그 조건에 해당하는 만큼 별을 찍게 될 것이다.
밖의 for문은 별이 찍히는 줄 수를 나타내고, 안의 for문은 j수만큼 별이 찍히는 모습을 나타낸다.
아래의 코드를 보고 확인해 보자.
안의 for문에서 j의 조건문의 부분을 밖의 i보다 작거나 같도록 설정하고 실행해보았더니 별이 작 찍히는 것을 확인할 수 있다. for문을 잘 하려면 반복, 코드를 바꿔가면서 공부하는 것이 제일 좋다.
삼각형 별찍기 2
★★★★★★★★★★
★★★★★★★★★
★★★★★★★★
★★★★★★★
★★★★★★
★★★★★
★★★★
★★★
★★
★
위의 모양의 별을 찍으려면 어떻게 하면 될까?
우선 10개의 줄이 찍히고, 별이 하나씩 줄어드는 모양으로 모양이 찍히고 있다.
바깥의 for문은 총 반복될 수를 지정하고, 안에 for문에서 별이 하나씩 줄어드는 조건을 주면 될 거 같다.
바깥의 for문에서는 총 10번이 반복되어야 하니 'i <= 10'이라는 조건을 주고, 안의 for문에서는 10개에서 별이 한 개씩 줄어드는 모양을 찍기 위해 생각해봐야할 게 1) 별이 하나씩 감소하고 2) 별이 첫줄에서 찍히는 개수가 10개인 점이다.
그렇다면 i의 값과 같거나 작은것을 조건으로 두고, 안의 조건에서 한개씩 줄이기 위해 증감식 부분은 --로 줘보면 될 것이다.
for문은 반복, 계속해서 코드를 변형해가면서 공부하는 게 답이다.
[참고 도서 Java의 정석_기초편] http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492049&orderClick=LEa&Kc=
'Java > 조건문 & 반복문' 카테고리의 다른 글
While문 예제 (0) 2020.10.29 while 문 (0) 2020.10.23 for문, for문 예제 (0) 2020.10.23 임의의 정수 만들기 - Math.random( ), Scanner로 입력받아서 for문을 통해 랜덤으로 숫자 출력해보기 (0) 2020.10.22 switch 문의 제약조건, switch문을 if - else if문으로 변경해보기 (0) 2020.10.22