반복문을 잘 활용하면 시간이 오래 걸리는 반복 작업을 간단하고 효율적으로 처리할 수 있습니다. 경우에 따라서는 하나의 반복문만으로 처리하기 어려운 작업도 있습니다. 이번 글에서는 반복문의 중첩에 대해 알아보겠습니다.
반복문의 중첩
구구단을 출력하는 프로그램을 작성하려고 합니다. 2단, 3단, 하나의 단을 출력하는 것은 우리가 사용했던 for문을 사용하면 어렵지 않게 출력할 수 있습니다. 예를 들어 2단을 출력한다고 했을 때, 2x1, 2x2, 2x3, ... , 2x9까지 곱해지는 수를 달리하며 반복문을 사용하면 됩니다.
그러면, 2단부터 9단까지 출력하는 것은 어떨까요? 2단을 출력하는 반복문이 끝나면 2단이 아닌 3단으로 단수가 올라가야 합니다. 서로 다른 반복문을 9번 써서 해결할 수도 있겠지만, 효율적인 프로그램은 비슷한 작업을 반복할 때 중복된 명령어의 형태를 최소화하는 것이 좋습니다. 이럴 때 사용하는 것이 반복문의 중첩입니다.
2단의 출력
간단하게 먼저 2단을 출력하는 프로그램을 작성해 봅시다.
print("구구단의 2단을 출력합니다.")
for i in range(1, 10):
print(f"2 x {i} = {2 * i}")
실행 결과
구구단의 2단을 출력합니다.
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
뒷자리를 i변수를 활용하여 바꾸며 출력한 결과입니다.
2단부터 9단까지 출력하기
핵심 아이디어는 이렇습니다. 2단을 출력하는 반복문을 살펴보면 뒤에 곱해지는 수를 변수로 하여 2단을 출력할 수 있었습니다. 이제 3단을 출력하기 위해서는 2 x 9 = 18을 출력하고 난 후 단수를 나타내는 앞의 2가 3으로 바뀌어야 하고, 동시에 뒤에 곱해지던 수는 9에서 1이 되어야 합니다. 이후 1부터 9까지 3단의 계산을 반복하게 될 것입니다. 반복되는 과정은 크게 두 가지 과정입니다.
- 뒤에 곱해지는 수를 1부터 9까지 늘려가며 반복문을 수행한다.
- 뒤에 곱해지는 수가 9일 때의 연산을 마치면 앞의 수를 하나 증가시켜 1의 동작을 반복한다.
그래서 이를 반복문의 중첩을 사용해 코드를 작성하면 됩니다.
코드 작성
앞에 곱하는 단수도, 뒤에 곱해지는 수도 변수의 영향을 받아 변합니다. 각각을 i와 j를 반영한 변수에 대응하여 반복문을 작성합니다. 단, 앞에 곱해지는 수는 2부터 9까지, 뒤에 곱해지는 수는 1부터 9까지 변화한다는 것에 주의하며 range의 범위를 설정합니다.
for i in range(2, 10): # 2단부터 9단까지
for j in range(1, 10): # 각 단의 곱하기 1부터 9까지
print(f"{i} x {j} = {i * j}")
코드 분석
for문을 중첩하여 사용하면 가장 밖의 for문에서 i를 고정합니다. 내부 반복문에서 i를 고정한 채로 j를 변경하며 반복문을 수행하고 j가 range의 범위를 모두 수행하고 나면 내부 반복문이 종료됩니다. 단, 바깥 반복문이 종료되지 않았다면, 다시 바깥 반복문의 i가 증가하여 다음 반복문을 수행하게 됩니다.
코드 개선
위와 같은 코드를 실행하면 출력 결과가 단수 구분되지 않고 출력됩니다. 같은 단은 한 줄 안에 공백으로 구분하고, 서로 다른 단은 줄바꿈하여 구분하도록 코드를 수정해 보겠습니다.
for i in range(2, 10): # 2단부터 9단까지
for j in range(1, 10): # 각 단의 곱하기 1부터 9까지
print(f"{i} x {j} = {i * j}", end="\t")
#end 함수로 공백(tab) 추가하여 같은 행에 같은 단 배치
print() #하나의 단이 끝나면 줄바꿈
리스트의 값 반복 처리
for문의 범위는 리스트로 사용할 수도 있습니다.
fruits = ["사과", "바나나", "포도"]
for fruit in fruits:
print(f"나는 {fruit}를 좋아합니다.")
실행결과
나는 사과를 좋아합니다.
나는 바나나를 좋아합니다.
나는 포도를 좋아합니다.
마치며
반복문은 프로그래밍에 꼭 필요한 도구입니다. 반복 작업을 단순화하고 효율적으로 처리할 수 있습니다. 경우에 따라 복잡한 반복문은 중첩하여 사용해야 할 때가 있습니다. 어떤 반복작업이 우선되는지를 잘 파악하여 순서를 고려한 반복문을 작성하기 위해 고민해야 합니다.