[강의] 코딩 훈련 교본 (코틀린편) - 14. 초보탈출 퀴즈
본 강의는 코틀린(Kotlin)의 문법강의가 아닌, 프로그래밍 훈련을 위한 강의입니다. 따라서, 본 강의에서 알려드리는 내용만으로 코딩훈련에 임하시기 바랍니다. ※ 퀴즈는 “프로그래머의 길(PWAY)”에서 발췌하였습니다. - 저도 이 책으로 입문했습니다.
여기까지 따라오셨다면 단언컨데, 이 문제를 모두 푸시면 초보를 탈출했다고 말할 수 있습니다. 문법을 많이 배우지 않았고, 아직 그럴듯한 프로그램을 짜보진 않았지만 걱정없습니다. 그건 그저 사용법을 배우면 될 뿐입니다. 생각하는 모든걸 프로그램으로 구현할 수 있는 능력을 얻었습니다. 이제 진짜 그런지 아닌지 문제를 풀어보겠습니다.
[Quiz 1]
문제 : 홀수 마방진 프로그램을 작성하시오.
조건 : 예상 결과와 결과값이 같아야 한다.
예상 결과:
n = 3
   8   1   6
   3   5   7
   4   9   2
   
n = 5
  17  24   1   8  15
  23   5   7  14  16
   4   6  13  20  22
  10  12  19  21   3
  11  18  25   2   9
홀수 마방진 규칙
- 주어진 배열의 첫번째행 가운데에서 시작한다.
- 1의 위치에서 대각선 오른쪽 위로 이동해서 다음 숫자를 넣는다.
- 첫줄 다음은 맨 아랫줄이다.
- 마지막 칸의 다음은 첫 칸이다.
- 진행하려는 칸에 이미 숫자가 있을 경우에는 원래 칸에서 밑으로 내려간다.
마방진에 값을 넣는 방식은 아래와 같이 한다.
// 줄 y와 칸 x의 초기값을 준다
y = 0
x = n / 2
for(i in 0 until n * n){
    // 배열에 값을 넣는다.
    arr[y][x] = i + 1
    // 다음 위치 x, y를 아래에서 규칙을 따라서 구한다.
}
[Quiz 2]
문제 : (i # j)의 값이 짝수인지 홀수인지에 따라서 0이나 1을 출력하는 프로그램을 작성하시오. #은 사칙연산(+, -, *, /) 중의 하나임.
**조건 : i, j 이외의 변수는 사용하지 않고 배열에 값을 넣는다. 배열에 값을 넣을 때 사용하는 코드(if문도 사용하지 않는다.) **
힌트 :
for(i in 0 until n){
    for(j in 0 until n){
        arr[i][j] = (i, j의 식) % 2
    }
}
예상 결과:
n = 5
   1   0   1   0   1
   0   1   0   1   0
   1   0   1   0   1
   0   1   0   1   0
   1   0   1   0   1
[Quiz 3]
문제 : 퀴즈 2번의 응용 문제
조건 : 예상 결과와 결과값이 같아야 한다.
힌트 :
for(i in 0 until n){
    for(j in 0 until n){
        arr[i][j] = (i, j의 식) % 2
    }
}
예상 결과:
n = 6
   1   1   0   0   1   1
   1   1   0   0   1   1
   0   0   1   1   0   0
   0   0   1   1   0   0
   1   1   0   0   1   1
   1   1   0   0   1   1
[Quiz 4]
문제 : 퀴즈 2번의 응용문제
조건 : 예상 결과와 결과값이 같아야 한다.
힌트 :
for(i in 0 until n){
    for(j in 0 until n){
        arr[i][j] = (i, j의 식) % 2
    }
}
예상 결과:
n = 6
   1   1   1   0   0   0
   1   1   1   0   0   0
   1   1   1   0   0   0
   0   0   0   1   1   1
   0   0   0   1   1   1
   0   0   0   1   1   1
퀴즈 2, 3, 4는 거의 같은문제입니다. 값 하나로 조절 가능해야 합니다.
개미 수열
개미수열을 풀기위한 준비
fun main(args: Array<String>){
    var n = 5
    var i = 0
    while(i < n){
        println("%4d".format(i))
        i++
    }
}
위 프로그램은 다음 프로그램과 같습니다.
fun main(args: Array<String>){
    for(i in 0 until n){
        println("%4d".format(i))
    }
}
while문은 위와 같이 for문과 그 성격이 같지만, 오직 조건에 의해서만 반복을 할지 말지를 결정하는 반복문입니다.
fun main(args: Array<String>){
    val a = intArrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0)
    println("Print the contents of array a[]")
    var i = 0
    while (a[i] > 0) {
        println("i=%4d ".format(a[i]))
        i++
    }
}
결과 :
i=   1 
i=   2 
i=   3 
i=   4 
i=   5 
i=   6 
i=   7 
i=   8 
i=   9 
i=  10 
위의 경우에 1차원 배열 a[]는 처음 만들때 값을 넣어서 초기화하는 방식입니다. 배열의 끝에 입력한 0을 보고 어떻게 프로그램이 종료할 수 있었는지 생각해보시기 바랍니다.
fun main(args: Array<String>){
    val a = intArrayOf(11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 0)
    var i = 0
    while (a[i] > 0) {
        if (a[i] > 10) {
            print("big ")
        } else {
            print("small ")
        }
        i++
    }
}
결과 :
big big big big big small small small small small 
배열의 숫자를 데이터로 활용하여 새로운 결과물을 만드는 방법입니다.
이걸 break 키워드를 활용하여 바꿔보겠습니다.
fun main(args: Array<String>){
    val a = intArrayOf(11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 0)
    var i = 0
    while (true) {
        if (a[i] <= 0) {
            break
        }
        if (a[i] > 10) {
            print("big ")
        } else {
            print("small ")
        }
        i += 1
    }
}
결과 :
big big big big big small small small small small
위의 while(true)에서 true는 항상 참이라는 뜻입니다. 이 프로그램이 실행되는 순간 영원히 멈주지 않는 프로그램이 됩니다. 이런 경우에 while문을 빠져나오기 위해 break 키워드를 사용할 수 있습니다. 이 모든것이 개미수열을 위한 준비운동이니 이것저것 바꿔가면서 익혀보시기 바랍니다.
fun main(args: Array<String>){
    val a = intArrayOf(11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 0)
    val b = IntArray(100)
    var i = 0
    while (a[i] > 0) { // a[]배열을 b[]배열에 복사 하는 프로그램
        b[i] = a[i]
        i++
    }
    println("Print the array b[]")
    i = 0
    while (b[i] > 0) {
        print("%4d".format(b[i]))
        i++
    }
}
결과 :
Print the array b[]
  11  12  13  14  15   6   7   8   9  10
위 프로그램은 a[]배열에서 b[]배열로 복사하는 프로그램입니다.
[Quiz 5]
문제 : 다음은 베르나르베르베르 소설에 나오는 개미수열이다. 이 수열을 프로그램으로 구현하라.
**수열 : **
   1
   1   1
   1   1   2   1
   1   2   2   1   1   1
   1   1   2   2   1   3
   1   2   2   2   1   1   3   1
   1   1   2   3   1   2   3   1   1   1
   1   2   2   1   3   1   1   1   2   1   3   1   1   3
   1   1   2   2   1   1   3   1   1   3   2   1   1   1   3   1   1   2   3   1
   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
조건 : 예상 결과와 결과값이 같아야 한다.
힌트 : 첫줄에서 둘째줄이 나오고, 둘째줄에서 셋째줄이 나오고, 셋째줄에서 넷째줄이 나옵니다. 첫번째 a[]에서 기본값으로 출발, a[]에서 비롯하여, b[]배열을 만들고, b[]를 출력하고, b[]를 a[]에 복사합니다. 다시 a[]에서 비롯하여, b[]배열을 만들고, b[]를 출력하고…………..
예상 결과:
n = 5
   1
   1   1
   1   1   2   1
   1   2   2   1   1   1
   1   1   2   2   1   3
 
      
댓글남기기