막무가내 삽질 블로그

백준 1차원 배열 (10818, 2562, 2577, 3052, 1546, 8958, 4344 with 코틀린 ) 본문

알고리즘 문제풀이

백준 1차원 배열 (10818, 2562, 2577, 3052, 1546, 8958, 4344 with 코틀린 )

joong~ 2021. 2. 15. 18:53
728x90

알고리즘 풀이 다시 하나씩 하는 중 ㅇㅇㅇㅇㅇ

 

 

 

10818번 최소, 최대

fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)

    val num = sc.nextInt()
    val array = IntArray(num)
    if (num in 1..1000000) {
        for (i in 0 until num) {
            array[i] = sc.nextInt()
        }
    }

   println("${min(array)} ${max(array)}")
}

fun max(array: IntArray): Int {
    var max = array[0]

    for (i in array.indices) {
        if (max < array[i]) {
            max = array[i]
        }
    }

    return max
}

fun min(array: IntArray): Int {
    var min = array[0]

    for (i in array.indices) {
        if (min > array[i]) {
            min = array[i]
        }
    }

    return min
}

 

 

 

 

 

 

2562번 최댓값

fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)

    val array = IntArray(9)

    for (i in 0..8) {
        array[i] = sc.nextInt()
    }

    maxResult(array)
}

fun maxResult(array: IntArray) {
    var max = array[0]
    var index = 1
    for (i in array.indices) {

        if (max < array[i])  {
            max = array[i]
            index = getIndex(i + 1)
        }
    }

    println(max)
    println(index)
}

fun getIndex(index: Int) = index

 

 

 

 

 

2577번 숫자의 개수

fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)

    val a = sc.nextInt()
    val b = sc.nextInt()
    val c = sc.nextInt()

    val array = IntArray(10)
    var result = a * b * c

    while (result != 0) {
        array[result % 10]++
        result /= 10
    }

    for (i in array.indices) {
        println(array[i])
    }
}

 

 

 

 

 

 

3052번 나머지

import java.util.*

fun main() {
    val sc = Scanner(System.`in`)

    val array = IntArray(10)
    val result = IntArray(10)

    for (i in 0..9) {
        array[i] = sc.nextInt() % 42
    }

    val set = copy(result, array)
    println(set.size)
}

private fun copy(from: IntArray, to: IntArray): HashSet<Int> {
    for (i in to.indices) {
        from[i] = to[i]
    }

    return from.toHashSet()
}

위 코드는 셋을 사용했기 때문에 배열로만 다시 풀어봤다.

 

import java.util.*

fun main() {
    val sc = Scanner(System.`in`)

    val array = IntArray(10)
    val result = IntArray(10)

    for (i in 0..9) {
        array[i] = sc.nextInt() % 42
    }

    equals(array)
}

private fun equals(array: IntArray) {
    var result = 0

    for (i in array.indices) {
        var count = 0
        for (j in i+1 until array.size) {
            if (array[i] == array[j]) {
                count++
            }
        }

        if (count == 0) {
            result++
        }
    }

    println(result)
}

2중 for문을 사용해 +1씩 늘려서 전체 다 검사를 해서 같은 값이면 count 증가 시켜줬고 같은 값을 찾지 못해 나오면 result를 증가 시켜주었다.

 

 

 

 

 

1546번 평균

fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)
    val n = sc.nextInt()
    val array = IntArray(n)

    for (i in array.indices) {
        array[i] = sc.nextInt()
    }

    val max = maxScore(array)
    val newArray = arrayToDouble(array, max)
    println(newAverage(newArray))
}

private fun arrayToDouble(array: IntArray, max: Int): DoubleArray {
    val newArray = DoubleArray(array.size)

    for (i in array.indices) {
        newArray[i] = newScore(array[i].toDouble(), max.toDouble())
    }

    return newArray
}

private fun maxScore(array: IntArray): Int {
    var temp = array[0]

    for (i in 1 until array.size) {
        if (temp < array[i]) {
            temp = array[i]
        }
    }

    return temp
}

private fun newScore(score: Double, max: Double): Double {
    return score / max * 100
}

private fun newAverage(array: DoubleArray): Double {
    var sum = 0.0

    for (i in array.indices) {
        sum += array[i]
    }

    return sum / array.size
}

입력받은 점수를 double로 변환해서 새로운 배열을 만들어서 max, newscore, newaverage로 풀어봤습니다.

 

 

 

 

8958번 OX퀴즈

import java.util.*

fun main() = with(Scanner(System.`in`)) {
    val num = nextInt()

    repeat(num) {
        val ox = next()
        var count = 1
        var result = 0
        ox.forEach {
            if (it == 'O') {
                result += count++
            } else {
                count = 1
            }
        }

        println(result)
    }
}

 

굉장히 쉬운문제 였지만 OX퀴즈에서 O를 숫자0 으로 해서 삽질했습니다. 너무 화나네요 후

 

 

 

 

 

4344번 평균은 넘겠지

import java.util.*

fun main() = with(Scanner(System.`in`)) {
    val num = nextInt()

    repeat(num) {
        val number = nextInt()
        val array = IntArray(number)

        for (i in array.indices) {
            array[i] = nextInt()
        }

        val total = totalScore(array)
        val average = average(total, array.size)
        val overPeople = overPeople(array, average)
        overPeopleAverage(overPeople, array.size)
    }
}

private fun totalScore(array: IntArray): Int {
    var total = 0

    for (i in array.indices) {
        total += array[i]
    }

    return total
}

private fun average(total: Int, peoples: Int) = total / peoples
private fun overPeople(array: IntArray, averageScore: Int): Int {
    var overPeople = 0
    for (i in array.indices) {
        if (array[i] > averageScore) {
            overPeople++
        }
    }

    return overPeople
}

private fun overPeopleAverage(overPeople: Int, allPeople: Int) {
    val average = (overPeople.toDouble() / allPeople.toDouble()) * 100
    println(String.format("%.3f%%", average))
}

 

Comments