막무가내 삽질 블로그
백준 1차원 배열 (10818, 2562, 2577, 3052, 1546, 8958, 4344 with 코틀린 ) 본문
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))
}
'알고리즘 문제풀이' 카테고리의 다른 글
Recursive call(재귀호출) (0) | 2021.12.01 |
---|---|
Codeup 코드업 자바 1098 ~ 1099 성실한 개미 (0) | 2020.02.02 |
Codeup 코드업 자바 1093~ 1097 (0) | 2020.01.31 |
CodeUp 코드업 자바 1089 ~ 1092 (0) | 2020.01.29 |
Comments