[강의] 코딩 훈련 교본 (코틀린 편) – 05. 반복문(2)

본 강의는 코틀린(Kotlin)의 문법강의가 아닌, 프로그래밍 훈련을 위한 강의입니다. 따라서, 본 강의에서 알려드리는 내용만으로 코딩훈련에 임하시기 바랍니다.

이중 for문

조금 더 복잡한 형태의 반복문을 배워보겠습니다. 지금까지는 일차원적인 반복을 하면서 프로그램이 실행되게 만들어 보았다면, 이제는 반복 안에서 또다른 반복이 이루어지는 프로그램을 작성해보겠습니다.

이해를 돕기 위해서 예를 들어보겠습니다. 군대에서 소대별로 줄을 세웁니다. 각 소대별로 줄을 서고, 각 소대는 계급대로 줄을 서는 것을 프로그래밍으로 구현한다면 아래 결과와 같을 것입니다.

1소대 - 병장, 상병, 일병, 이병
2소대 - 병장, 상병, 일병, 이병
3소대 - 병장, 상병, 일병, 이병
4소대 - 병장, 상병, 일병, 이병

그러면 여기서 소대는 빼고, 사람만 세워보면 아래처럼 바뀔 것입니다.

병장, 상병, 일병, 이병
병장, 상병, 일병, 이병
병장, 상병, 일병, 이병
병장, 상병, 일병, 이병

이제 숫자로 바꿔보면 아래와 같을 것입니다.

1 2 3 4 5
1 2 3 4 5
1 2 3 4 5 
1 2 3 4 5

자, 이런 프로그램을 구현하려면 어떻게 해야할까요? 우리는 단계적으로 생각하는 연습을 해야합니다. 첫번째로, 1, 2, 3, 4, 5를 출력하는 프로그램을 짜야 합니다. 일단 짜보겠습니다.

fun main(args: Array<String>) {
    println(\"1 2 3 4 5\")
}

두번째로, 이걸 네번 반복시키는 프로그램을 짜보겠습니다.

fun main(args: Array<String>) {
    for(i in 1..4) {
        println(\"1 2 3 4 5\")
    }
}

원하는 결과가 나왔지만 for문 안에 println문은 프로그램답지 않습니다. 세번째로, 4장에서 배웠던 코드를 for문 안에 삽입해보겠습니다.

fun main(args: Array<String>) {
    for(i in 1..4) {
        for(j in 1..5) {
            print(\"$j \")
        }
    }
}

위 코드는 결과가 아래와 같습니다.

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

원하는 결과에 근접했지만 줄이 바뀌지 않습니다.

다섯번째로, 위 코드에서 내부 for문이 한번 끝나면 줄을 바꿔줘야 할것 같습니다. 아래 코드를 실행시켜보겠습니다.

fun main(args: Array<String>) {
    for(i in 1..4) {
        for(j in 1..5) {
            print(\"$j \")
        }
        println()
    }
}

결과 :

1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 

이제 원하는 결과를 얻었습니다. 이것이 이중 for문입니다. 조금 더 발전시켜서 변수 n을 입력받아서, n열, n행만큼 출력하는 프로그램을 구현해보겠습니다.

fun main(args: Array<String>) {
    var n = 5
    println(\"n = $n\")

    for(i in 1..n) {
        for(j in 1..n) {
            print(\"$j \")
        }
        println()
    }
}

결과 :

n = 5
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 

이제, 문제를 풀기 위한 기본 코드를 실행해보겠습니다.

fun main(args: Array<String>) {
    var n = 5
    var k = 1
    println(\"n = $n\")

    for(i in 1..n) {
        for(j in 1..n) {
            print(\"%4d\".format(k++))
        }
        println()
    }
}

결과 :

n = 5
   1   2   3   4   5
   6   7   8   9  10
  11  12  13  14  15
  16  17  18  19  20
  21  22  23  24  25

위 코드에서 print문은 공백을 4칸으로 고정시키기 위한 방법입니다. 그리고 k++은 변수 k의 값을 한번 실행한 뒤, 1만큼 증가시키는 연산자입니다. 아래 코드를 실행해보면 이해하실 수 있습니다.

fun main(args: Array<String>) {
    var k = 1
    println(k++)
    println(k++)
    println(k++)
    println(k++)
    println(k++)
}

결과 :

1
2
3
4
5

또 다른 방법으로 숫자를 증가시키는 방법입니다.

fun main(args: Array<String>) {
    var n = 5
    var k = 1
    println(\"n = $n\")

    for(i in 1..n) {
        for(j in 1..n) {
            print(\"%4d\".format(k))
            k = k + 1
        }
        println()
    }
}

결과 :

n = 5
   1   2   3   4   5
   6   7   8   9  10
  11  12  13  14  15
  16  17  18  19  20
  21  22  23  24  25

print문으로 k를 출력한 뒤, \”k = k + 1\” 이라는 수식으로 k 값을 1 증가시켰습니다.
이 수식은 수학으로 바라보면 안되고 아래와 같이 해석해야 합니다.

k <- k + 1

오른쪽항의 \”k + 1\”을 수행한 뒤, 왼쪽 항의 k에 다시 할당하라는 뜻입니다.
이것을 응용하면 다양한 프로그램을 짤 수 있습니다.

이제 퀴즈를 풀기위한 준비가 끝났습니다.

다음 6장에서는 지금까지 배운 내용만으로 풀 수 있는 퀴즈를 드릴테니, 반드시 외부의 도움 없이 오롯이 혼자 풀어보시기 바랍니다.

[이전글] [강의] 코딩 훈련 교본 (코틀린 편) – 04. 반복문(1)

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x