TIL #43

loci·2024년 6월 12일
0

TIL

목록 보기
41/111


예상 대진표

토너먼트 대회에서 참가자가 총 n명 있을때 a번의 참가자와 b번의 참가자가 만났을때 몇 번째 라운드인지 구하는 문제

1과2, 3과 4... 이런식으로 a와 b가 만났을때 라운드를 구하는 식으로 풀었는데 다른풀이를 보니 둘의 몫이 같을때를 구하면 쉽게 풀수있는 문제였다.


나의 풀이

class Solution {
    fun solution(n: Int, a: Int, b: Int): Int {
        var answer = 0
        var aa = a
        var bb = b
        var count = 1
        var total = n
        while(total > 1){
            for( j in 1..total step 2){
                if(aa == j && bb == j + 1 || aa == j + 1 && bb == j){
                    answer = count
                    break
                }           
            }
            
            if(aa > 1 && aa % 2 != 0){
                    aa = aa / 2 + 1
            } else if(aa > 1){
                    aa /= 2
            }
            
            if(bb > 1 && bb % 2 != 0){
                    bb = bb / 2 + 1
            } else if (bb > 1){
                    bb /= 2
            }
            
            total /= 2
            count++
        }
        return answer
    }
}

class Solution {
    fun solution(n: Int, a: Int, b: Int): Int {
        var answer = 0
        var x = a
        var y = b
        while (x != y) {
            x = (x + 1) / 2
            y = (y + 1) / 2
            answer++
        }
        return answer
    }
}

몫이 같을때까지 반복해 몇 번 반복했는지 반환


배열

// 배열선언
var arr = arrayOf(1,2,3,4,5) 

// 배열요소를 모두 출력합니다 
println(Arrays.toString(arr)) // java.util.Arrays를 import해주어야함
println(arr[0])

for((idx, arr) in arr.withIndex()){
	println("${idx}}번째 국어 점수는 ${arr}입니다")
}

컬렉션

  • 코틀린에선 리스트, 맵, 집합 자료구조를 지원

List

// 읽기전용 리스트
var scores1 = listOf(1,2,3)

// 수정가능 리스트
// .set으로 값을 수정가능
var scores2 = mutableListOf(1,2,3)
scores2.set(인덱스,)

// 수정가능 리스트
// array로 데이터를 저장하고 mutableListOf처럼 사용할 수 있다(arrayList는 mutableList의 구현체)
var scores3 = ArrayList<자료형>(1,2,3)
scores3.set(인덱스,)

Map

  • map은 키와 값의 쌍으로 이루어짐
// 읽기전용 맵
// 변수명[키]로 데이터에 접근
var scoreInfo1 = mapOf("kor" to 94, "math" to 90, "eng" to 92)
println(scoreInfo1["kor"])

// 수정가능 맵
// 변수명[키]로 데이터에 접근
var scoreInfo2 = mutableMapOf("kor" to 94, "math" to 90)
scoreInfo2["eng"] = 92
println(scoreInfo2["eng"])

// 맵의 키와 값을 동시에 추출하는 법
for((k,v) in scoreInfo2) {
    println("${k}의 값은 ${v}입니다")
}

Set

  • 순서가 존재하지 않고 중복없는 데이터를 관리하는 집합 자료형
  • 다른 컬렉션은 요소를 찾는데 집중하지만, Set은 요소가 존재하는지가 중요
//  읽기전용 set
var birdSet = setOf("닭", "참새", "비둘기")

//  수정가능 Set
var mutableBirdSet = mutableSetOf("닭", "참새", "비둘기")
mutableBirdSet.add("꿩")
mutableBirdSet.remove("꿩")
println("${birdSet.size}")


var findBird = readLine()!!

if(birdSet.contains(findBird)) {
    println("${findBird} 종류는 존재합니다.")
} else {
    println("${findBird}는 존재하지 않습니다.")
}

var birdSet = setOf("닭", "참새", "비둘기", "물오리")
var flyBirdSet = setOf("참새", "비둘기", "까치")

// (합집합)
var unionBirdSet = birdSet.union(flyBirdSet) // [닭, 참새, 비둘기, 물오리, 까치]

// (교집합)
var intersectBirdSet = birdSet.intersect(flyBirdSet) // [참새, 비둘기]

// (차집합)
var subtractBirdSet = birdSet.subtract(flyBirdSet) // [닭, 물오리]

Single-expression function

  • 자바8과 동일하게 람다식 지원
  • 하나의 메소드를 간결하게 표현할 수 있는 방법
{매개변수1, 매개변수2... -> 코드 }

fun add(num1:Int, num2:Int, num3:Int) = (num1+num2+num3)/3

var add = {num1: Int, num2: Int, num3: Int -> (num1+num2+num3) / 3}

println("평균값은 ${add(10,20,30)}입니다")
profile
편리한 개발자

0개의 댓글