개발일지

2024.01. 08 TIL

과일바구니♡ 2024. 1. 8. 21:16

1. 배운내용

   1)알고리즘 코드카타

문제를 검색하고, 알아보고, 해답코드에 쓰인 함수코드를 알아보려고 합니다.

 

정답

class Solution {
    fun solution(arr: IntArray, divisor: Int): IntArray {
        var answer = intArrayOf()

        arr.forEach { if (it % divisor == 0) answer += it }
        answer.sort()

        if (answer.size == 0) answer += -1

        return answer
    }
}

 

class Solution {
    fun solution(arr: IntArray, divisor: Int): IntArray {
        var answer = ArrayList<Int>()
        var idx: Int = 0

        for (e in arr) {
            if (e%divisor == 0) {
                answer.add(e)
            }
        }
        if (answer.isEmpty()) answer.add(-1)

        return answer.toIntArray().sortedArray()
    }
}
class Solution {
    fun solution(arr: IntArray, divisor: Int): IntArray {
        return getDividedNumbers(arr, divisor)
    }

    fun getDividedNumbers(array: IntArray, divisor: Int): IntArray {
        val dividedNumbers = array.filter { it % divisor == 0 }
        if (dividedNumbers.count() == 0) {
            return intArrayOf(-1)
        }
        return dividedNumbers.sorted().toIntArray()
    }
}
class Solution {
    fun solution(arr: IntArray, divisor: Int): IntArray {
        var answer = arrayListOf<Int>()

        for (ar in arr){
            if (ar % divisor == 0){
                answer.add(ar)
            }
        }

        if (answer.size == 0){
            answer.add(-1)
        }

        return answer.sorted().toIntArray()
    }
}

 

문제를 검색하고, 알아보고, 해답코드에 쓰인 함수코드를 알아보려고 합니다.

이해

  • 나누어 떨어지는 값
    오름차순 배열 반환
  • 나누어 떨어지는 값없으면
  • 1

접근

  1. foreach -> 나누어 떨어지는 값 찾기
  2. 정렬
  3. 비었을 경우 처리

class Solution {

fun solution(arr: IntArray, divisor: Int): IntArray {

var answer = intArrayOf() arr.forEach {

if (it % divisor == 0) { answer += it } }

answer.sort() if (answer.isEmpty()) { answer += -1 }

return answer } } }

 

진행

배열을 어떻게 할까 그냥 고정된값을 집어 넣을까 입력을 받을까 했지만

고정된값이면 코드 짤 맛이 없고 입력을 받으면 사용자가 힘드니

랜덤한 크기의 배열을 만들어 랜덤한 수를 넣고 구해봐야겠다

일단 배열을 만들 함수를 만들어줘야겠다

일단 사이즈를 정해주자 제한사항은 없지만 배열이 너무 길면 값이 너무 많아 질테니

길이 10안쪽으로 설정해줬다

val size = Random.nextInt(1,10)

다음은 배열을 만들자
제한사항에 배열마다 중복되는 숫자가 없다고 하니 중복이 안되게 만들어야 한다

mutableSetOf를 이용하자 setof는 배열에 중복되는 숫자가 있으면 무시한다

반복문을 만들어 배열에 계속 랜덤한 값을 넣고 만약 중복되는 수가 있으면 배열에 넣지말고 다시 랜덤하게 돌리게 하자

fun makearray() : IntArray {
    val size = Random.nextInt(1,10)
    val arr = IntArray(size)
    val dup = mutableSetOf<Int>()
    var i = 0

    while (i < size){
        var a =0
        do{
        a = Random.nextInt(1,100)}
            while (!dup.add((a)))

            arr[i] = a
        i++
    }

    return arr
}

배열이 만들어졌다 

makearray에서 만든 배열을 바탕으로 사용자에게 입력받은 divisor 값을 나눠 나머지를 구한다

나머지가 0인경우에 새로운 배열에 추가하고 sort를 이용해 오름차순으로 정렬시키자

fun solution(x:Int , y:IntArray ):IntArray {
    var answer = mutableListOf<Int>()
    var arr = y
    var i = 0
    while (i < arr.size){
        if (arr[i] % x == 0) answer.add(arr[i])
        i++
    }

    if(answer.isEmpty()) answer.add(-1)
    answer.sort()

    r

코드

package com.example.codekata

import kotlin.random.Random

fun main() {
    val arr = makearray()
    println("${arr.contentToString()}")
    println("divisor 값을 입력하세요")
    val num = readln().toInt()
    println(" ${solution(num, arr).contentToString()}")
}

fun solution(x:Int , y:IntArray ):IntArray {
    var answer = mutableListOf<Int>()
    var arr = y
    var i = 0
    while (i < arr.size){
        if (arr[i] % x == 0) answer.add(arr[i])
        i++
    }

    if(answer.isEmpty()) answer.add(-1)
    answer.sort()

    return answer.toIntArray()
}

fun makearray() : IntArray {
    val size = Random.nextInt(1,10)
    val arr = IntArray(size)
    val dup = mutableSetOf<Int>()
    var i = 0

    while (i < size){
        var a =0
        do{
        a = Random.nextInt(1,100)}
            while (!dup.add((a)))

            arr[i] = a
        i++
    }

    return arr
}

 

-----------------------------------------------------------풀이------------------------------------------------------------------
1. filter로 arr의 배열 요소중 divisor로 나누어떨어지는 수를 걸러내어 mutableList로 반환한다.
2. answer의 size가 0크면 정렬 후 IntArray로 형변환 후 반환, 0보다 작으면 나누어 떨어지는 수가 없는 것이므로 List에 -1을 넣어 IntArray로 형변환하고 반환한다. 

 

foteach는 for문이고, divisor은 검색해봤는데 마땅한 설명을 못봤다..;;

 

2. 뉴스피트 프로젝트 시작

   1) 팀 노션, 아이디어, ERD그리기,api 짜기, S.A 작성중.

      프로젝트 아이디어 내고, 프로젝트 도메인, 커멘드, 이벤트와 정책을 정리하였다.

그리고 ERD 테이블을 그렸다. 학생, 튜터, 질문, 대답 4가지 테이블을 작성했는데, 이들의 연관관계를 DB에서, 객체지향의 측면에서 필요한 부분만 연결시키기 위해 고민하는 시간들이 있었다.  그래서 연관관계는 질문->답변 일대다 단방향, 답변->질문 다대일 단방향, 

질문-> 튜터 다대일 단방향, 튜터-> 질문x, 질문-> 학생 다대일 단방향, 학생->질문 일대다 단방향으로 정리되었다.

API도  작성중이다.  

    

 

 

 

 

 

 

 

'개발일지' 카테고리의 다른 글

2024.01.10 TIL  (0) 2024.01.10
2024.01.09 TIL  (0) 2024.01.09
2024.1.5 TIL  (1) 2024.01.05
2024.1.4 TIL  (0) 2024.01.04
20204.1.3 TIL  (0) 2024.01.03