TIL21. python 중첩 루프

Jaeyeon·2021년 2월 19일
0
post-thumbnail

중첩 루프 사용

콘솔(터미널, 명령 프롬프트)은 2차원 평면이므로 별을 일정한 모양으로 출력하려면
반복문을 두 개 사용하는 것이 편리하다.

for i in range(5):          # 5번 반복. 바깥쪽 루프는 세로 방향
    for j in range(5):      # 5번 반복. 안쪽 루프는 가로 방향
        print('j:', j, sep='', end=' ')    # j값 출력. end에 ' '를 지정하여 줄바꿈 대신 한 칸 띄움
    print('i:', i, '\\n', sep='')    # i값 출력, 개행 문자 모양도 출력
                                     # 가로 방향으로 숫자를 모두 출력한 뒤 다음 줄로 넘어감
                                     # (print는 기본적으로 출력 후 다음 줄로 넘어감)

이러한 코드를 실행하면

위와 같이 바깥쪽루프는 세로방향 안쪽루프는 가로방향을 담당하게 된다는 것을 알 수 있다.

중첩루프 알고리즘 풀이 할 때는

머릿속에 바둑판을 그리고
별이 위치해 있는 행과 열을 생각한 후 그 위치의 공통점 혹은 규칙 찾아내기
ex: (0,0) (1,1) (2,2) 등등

3열 7행 별 출력하기

for i in range(3):
	for j in range(7):
    		print('*',end='')
        print()
결과값
*******
*******
*******

계단식으로 별 출력하기

  1. 5행 5열
  2. 별이 한개 씩 증가
  3. 좌표 - (0.0),(1,0),(1,1),(2,0),(2,1),(2,2) 등
  4. j의 값이 i의 값을 넘지 않는다는 것을 확인
for i in range(5):
	for j in range(5):
    		if i >=j:
            		print('*', end='')
                else:
                	print(' ', end='')
        print()
결과값:
*
**
***
****
*****

대각선으로 별 출력하기

  1. 5행 5열
  2. 별이 대각선으로 이동
  3. 좌표 - (0.0),(1,1),(2,2),(3,3),(4,4),(5,5)
  4. j의 값과 i의 값이 같을 때만 별이 찍힌다는 것을 확인
for i in range(5):
    for j in range(5):
        if i==j:
            print('*', end='')
        else:
            print(' ', end='')
    print()
결과값:
*
 *
  *
   *
    *    

역삼각형 계단으로 별 출력하기

  1. 5행 5열
  2. 별이 한개 씩 증가
  3. 좌표 - (0.0),(0.1),(0,2),(0,3),(0,4),(0,5) 등
  4. i의 값이 j의 값을 넘지 않는다는 것을 확인
for i in range(5):
    for j in range(5):
        if i <=j:
            print('*', end= '')
        else:
            print(' ', end='')
    print()
결과값:
*****
 ****
  ***
   **
    *

피라미드 별 출력하기

a = int(input())
for i in range(a):
    for j in range(a*2-1):
        if i+j == a-1:
            for k in range(2*i+1):
                print('*', end='')
        else:
            print(' ', end='')
    print()
결과값: 5
    *    
   ***     
  *****      
 *******       
*********  
결과값: 3
  *  
 ***   
***** 
                                
profile
생각하는 개발자 되기

0개의 댓글