[백준] 1920번: 수 찾기 - Kotlin[코틀린]

2023. 7. 20. 17:24·알고리즘/Baekjoon

문제

 

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

 


풀이

 

 이 문제를 풀이하기 위해 이분 탐색(Binary Search) 알고리즘이 필요하다. 이분 탐색이란 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 처음 중간값을 선택하고, 찾고자하는 값과 비교해서 중간값이 더 크다면 그 중간값이 새로운 최댓값이 되고, 더 작다면 최솟값이 된다. 그리고 다시 새로운 중간값을 찾고, 찾고자하는 값과 비교해나가는 것이다.

이미지 출처 - 위키 백과

 풀이한 코드에서는 binarySearch 함수의 return 값을 Boolean으로 정하고, 찾고자 하는 값을 찾았다면 true 아니라면 false를 return 하도록 하였다.

 


코드

 

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    val sb = StringBuilder()

    val size = br.readLine().toInt()
    val arr = br.readLine().split(' ').map { it.toInt() }.toIntArray() // 주어진 정수
    arr.sort()

    val num = br.readLine().toInt()
    val line = br.readLine().split(' ').map { it.toInt() }.toIntArray() // 찾으려는 정수

    line.forEach {
        if(binarySearch(arr, it)) {
            sb.append(1).append('\n')
        } else {
            sb.append(0).append('\n')
        }
    }

    bw.write("$sb")
    bw.flush()
    bw.close()
    br.close()
}

fun binarySearch(arr: IntArray, key: Int) : Boolean { // arr: 입력받은 숫자, key : 찾으려는 값
    var lo = 0
    var hi = arr.size - 1

    while (lo <= hi) {
        val mid = (lo+hi) / 2

        if(arr[mid] == key) {
            return true
        } else if (arr[mid]> key) { // mid가 key보다 크다면 mid가 새로운 최댓값이 된다.
            hi = mid - 1
        } else { // mid가 key보다 작다면 mid가 새로운 최솟값이 된다.
            lo = mid + 1
        }
    }

    return false
}

 

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

[백준] 9012번: 괄호 - Kotlin[코틀린]  (0) 2023.07.25
[백준] 7568번: 덩치 - Kotlin[코틀린]  (0) 2023.07.21
[백준] 11726번: 2×n 타일링 - Kotlin[코틀린]  (0) 2023.07.20
[백준] 1181번: 단어 정렬 - Kotlin[코틀린]  (0) 2023.07.19
[백준] 1003번: 피보나치 함수 - Kotlin[코틀린]  (0) 2023.07.19
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 9012번: 괄호 - Kotlin[코틀린]
  • [백준] 7568번: 덩치 - Kotlin[코틀린]
  • [백준] 11726번: 2×n 타일링 - Kotlin[코틀린]
  • [백준] 1181번: 단어 정렬 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      dfs
      그래프이론
      티스토리
      이분 탐색
      BFS
      MST
      브루트포스
      에라토스테네스의 체
      그리디
      누적 합
      정렬
      유니온파인드
      백트래킹
      재귀
      수학
      프림
      분할 정복
      소수 판정
      크루스칼
      구현
      모듈러 곱셈 역원
      투 포인터
      분리집합
      DP
      피보나치
      큐
      우선순위 큐
      문자열
      그래프 탐색
      스택
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 1920번: 수 찾기 - Kotlin[코틀린]
    상단으로

    티스토리툴바