본문 바로가기
Algorithm and PS/백준(Kotlin)

백준 - 3273 두 수의 합 (코틀린)

by ESHC 2021. 12. 30.

[문제]

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

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

[코드]

private var n  = 0
private lateinit var arr : IntArray
private var x  = 0
private lateinit var subs : BooleanArray

fun main() {
    val br = System.`in`.bufferedReader()
    n = br.readLine().toInt()
    arr = br.readLine().split(" ").map { it.toInt() }.toIntArray()
    x = br.readLine().toInt()
    subs = BooleanArray(x+1){false}

    var result = 0
    for(i in 0 until n){
        if(arr[i]>=x) continue
        if(subs[x-arr[i]])
            result += 1
        subs[arr[i]] = true
    }
    println(result)
}

[풀이]

배열을 이용하여 풀었다.

크기가 x+1 인 BooleanArray를 만들고 (코드상에선 subs)

n개의 정수들이 담긴 arr를 for문으로 도는데

subs[arr[i]] 의 값을 true로 하여 현재 정수 값을 표시하고

만약 이전에 x-arr[i] 가 이미 나왔다면 subs[x-arr[i]]값이 true이기 때문에 result 를 1씩 늘려준다.

해당 정수 값이 x보다 크거나 같으면 두 수의 합이 x보다 크므로 continue를 이용해서 바로 넘긴다.

 

Github : https://github.com/eshc123/2021AlgorithmStudy/blob/main/src/main/PS/baekjoon/3273.kt

댓글