백준 [3646] kotlin

[문제]

https://www.acmicpc.net/problem/3649

 

3649번: 로봇 프로젝트

각 테스트 케이스마다 한 줄에 하나씩, 구멍을 완벽하게 막을 수 있는 두 조각이 없다면 'danger'를 출력한다. 막을 수 있는 경우에는 'yes ℓ1 ℓ2'를 출력한다. (ℓ1 ≤ ℓ2) 정답이 여러 개인 경우에

www.acmicpc.net

[해설]

들어가기 앞서 이 문제는 삽질을 강제로하게 만들었다.

 

입력은 여러 개의 테스트 케이스로 이루어져 있다. <- 이 키워드 때문에 여러 테스트 케이스를 받아야 한다.

 

그것 외에는 간단한 투 포인터 문제였다.

 

풀이 과정은 아래와 같다.

  1. 레고 길이를 배열 arr에 저장하고, 정렬을 한다.
  2. i = 0j =  [레고 배열의 크기 - 1] 로 선언하고, i < j 이면 아래의 과정을 반복한다
    1. arr[i] + arr[j] 가 막아야할 구멍의 크기와 같다면 반복을 멈춘다
    2. arr[i] + arr[j] 가 구멍의 크기보다 작다면, i++ 를 해준다.
    3. arr[i] + arr[j] 가 구멍의 크기보다 크다면, j-- 를 해준다.

[코드]

import java.util.Scanner

var x = 0
fun main()
{
    var br = Scanner(System.`in`)
    while(br.hasNext())
    {
        val x = br.nextInt() * 10000000
        val size = br.nextInt()
        var arr = arrayListOf<Int>()
        repeat(size)
        {
            arr.add(br.nextInt())
        }
        arr.sort()
        var i = 0
        var j = size-1

        var find = false
        while(i < j)
        {
            val tmp = arr[i] + arr[j]
            if(tmp == x) {
                find = true
                println("yes ${arr[i]} ${arr[j]}")
                break
            }
            else if(tmp < x) i++
            else j--
        }
        if(!find) println("danger")
    }
}

'백준 > 투 포인터' 카테고리의 다른 글

백준 [2473] kotlin  (0) 2023.07.22
백준 [1644] - kotlin  (0) 2023.06.27
백준 [2467] kotlin  (0) 2023.01.12
백준 [2493] kotlin  (0) 2023.01.11
백준 [20437] kotlin  (0) 2023.01.10