본문 바로가기
카테고리 없음

프로그래머스 2차원으로 만들기 코틀린

by 시계속세상은아직돌아가는중 2023. 8. 8.

1.문제

https://school.programmers.co.kr/learn/courses/30/lessons/120842

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2.정답

구현검증

package com.example.answersheet

fun main(){

    val numList = intArrayOf(1,2,3,4,5,6,7,8)

    println("몇 개의 배열로 묶을까요?")
    val n = readLine()!!.toInt()

    var q = 0

    var answer:Array<Array<Int>> = Array(numList.size/n) {Array(n){0} }

    for (i in 0 until answer.size){
       for(j in 0 until n){
           if (q < numList.size){
               answer[i][j] = numList[q]
               q++
           }
       }
    }

    for(i in answer){
        println(i.contentToString())
    }
}

정답

class Solution {
    fun solution(numList: IntArray, n: Int): Array<Array<Int>> {
       var answer:Array<Array<Int>> = Array(numList.size/n) {Array(n){0}}
        var index = 0
        for(i in 0 until answer.size){
            for(j in 0 until n){
                if(index < numList.size){
                    answer[i][j] = numList[index]
                    index++
                }
            }
        }
        return answer
    }
}

3.고찰

 

해당 문제는 2차원 배열을 만드는 법을 이해한다면 꽤나 쉬운 문제가 된다.

answer의 범위만 잘 지정해주면 되기 때문이다

 

var answer:Array<Array<Int>> = Array(numList.size/n) {Array(n){0} }

 

에서 Array(numList.size/n)인 이유는 전체 Array의 크기는 numList를 n번 묶은 크기 즉 두 수를 나눈 값이 되기 때문이다.

그 안의 Array()의 크기는 n개씩 묶었으므로 n이다

 

2차원 배열 예제로 인덱스를 왜 저렇게 설정했는지 알아보자.

 

이전에 풀었던 로그인 검증할 때 만들었던 2차배열

 

    val db:Array<Array<String>> = arrayOf(arrayOf("rardss","123"),
                                          arrayOf("yyoom","1234"),
                                          arrayOf("meosseugi","1234"))

에서

 

db[0][0] = "rardss"

db[0][1] ="123"

이다

 

즉 원래 문제로 돌아와서

 

answer[0]은 answer안에 있는 첫 번째 arrayof고

answer[0][0]은 answr안에 있는 첫 번째 arrayof의 [0]번째 인덱스의 값이다.

 

그러므로 우리는 n회 묶었으므로

 

answer[numList.size/n-1][n-1]까지의 인덱스를 가지고 있다

4. 참고 블로그

https://asuhdevstory.tistory.com/entry/Kotlin-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4%EC%9D%84-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%B3%B4%EC%9E%90

 

[Kotlin] 2차원 배열을 이해하고 사용해 보자!

코틀린에서의 2차원 배열은 다른 언어와 조금 다릅니다. 그리고 사용하는 방법도 여러가지 입니다. 우선들어가기 앞서서 행과 열에 대해 알아봅시다 가로로 쭉 한줄이 1행 입니다. 이 표는 가로

asuhdevstory.tistory.com