23.12.22 문법정리

KSang·2023년 12월 26일
0

TIL

목록 보기
18/101

문법정리

Math.ceil

숫자를 올림해서 나타낸다

Double 타입의 인자를 받아, 그 값을 올림한 결과를 Double 타입으로 반환한다

import kotlin.math.ceil

fun main() {
    val num1 = 1.2
    val num2 = 3.7
    val num3 = 5.0

    println(ceil(num1))  // 출력: 2.0
    println(ceil(num2))  // 출력: 4.0
    println(ceil(num3))  // 출력: 5.0
}

offer

offer() 함수는 코틀린의 코루틴 라이브러리에서 제공하는 함수로, Channel 이라는 특별한 형태의 데이터 구조에 값을 추가하는 데 사용한다

Channel은 코루틴 간에 데이터를 안전하게 전달하는 데 사용되는 구조

Channel에 값을 추가하려 할 때 사용되며, Channel이 가득 찼거나 닫혔을 경우에는 실패하고 false를 반환한다

값이 성공적으로 추가되었다면 true를 반환한다

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*

fun main() = runBlocking {
    val channel = Channel<Int>(3) // 용량이 3인 Channel 생성
    val sender = launch {
        repeat(10) {
            println("Sending $it") // 데이터 전송을 시도하고 결과를 출력
            if (channel.offer(it)) {
                println("Sent $it")
            } else {
                println("Failed to send $it")
            }
        }
    }
    delay(1000) // 1초 동안 코루틴을 중지
    sender.cancel() // sender 코루틴을 취소
}

channel.offer(it)를 통해 Channel에 값을 추가하려고 시도하며, 값이 성공적으로 추가되었는지 여부에 따라 다른 메시지를 출력한다

그 외에도 offer() 함수는 주로 큐(Queue) 또는 데크(Deque)와 같은 컬렉션에서 사용하며, 주어진 요소를 컬렉션의 끝에 추가하는 역할을 한다

offer(E e) 형태로, 특정 요소를 큐의 끝에 추가한다
추가에 성공하면 true를 반환하고, 실패하면 false를 반환한다
add() 메소드와 유사하나, add() 메소드는 큐의 용량이 가득 찼을 때 예외를 발생시키는 반면, offer() 메소드는 false를 반환하여 실패를 안전하게 처리한다

import java.util.LinkedList
class Solution {
    fun solution(priorities: IntArray, location: Int): Int {
        val que = LinkedList<Pair<Int, Int>>()
        priorities.forEachIndexed { i, v -> que.offer(Pair(i, v)) }
        var order = 0
        while (true) {
            val current = que.poll()
            if (que.any { it.second > current.second }) que.offer(current)
            else if (current.first == location) return ++order
            else order++
        }
    }
}

여기서 offer는 linkedList에 값을 마지막에 추가하는데 쓴다

add와의 차이 점은 추가에 실패하면 add는 예외를 발생시키지만 offer는 false를 반환해 안정성이 더 높다

poll()

poll() 함수는 주로 큐(Queue) 또는 데크(Deque)와 같은 컬렉션에서 사용되며, 컬렉션의 첫 번째 요소를 제거하고 그 요소를 반환한다

큐가 비어 있을 경우에는 null을 반환한다

remove() 메소드와 유사하나, remove() 메소드는 큐가 비어 있을 때 예외를 발생시키는 반면, poll() 메소드는 null을 반환하여 실패를 안전하게 처리한다

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        queue.offer(1);
        queue.offer(2);
        queue.offer(3);

        System.out.println(queue.poll()); // 출력: 1
        System.out.println(queue.poll()); // 출력: 2
        System.out.println(queue.poll()); // 출력: 3
        System.out.println(queue.poll()); // 출력: null (큐가 비어 있으므로 null 반환)
    }
}

0개의 댓글