본문 바로가기

알고리즘

시간 복잡도 계산 하기

728x90

정의

시간 복잡도는 문제를 해결하는데 걸리는 시간과 입력의 함수 관계를 가리킨다. (위키백과 출저.)

빅오(Big-O)표기법

알고리즘 실행 시간 분석에 사용되는 대표적인 표기법이다. 최악의 상황을 고려하여 계산하는 표기법이다.

빅오 표기법 종류

  1. O(1) :입력 값이 증가하더라도 수행 시간이 변경없다.
fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)
    val a = sc.nextInt()
    val b = sc.nextInt()
    val c = sc.nextInt()
    val result = a + b + c
    println(result)
}
  1. O(logN) : 로그 복잡도라 불리며 O(1) 다음으로 빠른 복잡도이다. 이진 탐색의 경우 이에 해당 한다.
  2. O(N) : 선형 복잡도로 증가한 입력의 수 만큼 시간이 증가 한다. 보통 1억 6천만 입력까지 1초안에 결과가 나타난다.
fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)
    val N = sc.nextInt()

    for (index in 0..N-1) {
        println(index)
    }
}
  1. O(N^2) : 2차 복잡도로 입력된 수에 따라 결과는 그 수의 제곱만큼 시간이 늘어난다. 40960의 입력까지 1초안에 수행될 수 있다.
fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)
    val N = sc.nextInt()

    for (index in 0..N-1) {
        for (_index in 0..N-1) {
            println(index + _index)
        }
    }
}
  1. O(nlogn) : 약 2천만의 입력까지 1초안에 수행될 수 있다.  
728x90

'알고리즘' 카테고리의 다른 글

[BOJ][KOTLIN] 10809 알파벳 찾기  (0) 2021.11.16
[Kotlin] char 를 Int 로 변환  (0) 2021.11.16
[BOJ][Kotlin] 3052  (0) 2021.11.15
[Kotlin] 배열  (0) 2021.11.15
알고리즘 문제 해결 시 입력 받기  (0) 2021.10.25