1253번: 좋다백준/문제2024. 5. 10. 02:24
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/1253
언어 : Kotlin
문제 설명 :
N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.
N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.
수의 위치가 다르면 값이 같아도 다른 수이다.
입력 :
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
출력 :
좋은 수의 개수를 첫 번째 줄에 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
10 1 2 3 4 5 6 7 8 9 10 |
8 |
풀이 :
투 포인터를 사용해 Ai를 양쪽 끝에서부터 2개의 숫자를 비교하며 좋은 수의 갯수를 찾는다.
start + end < target => start++
start + end > target => end--
start + end == target => result++
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
var result = 0
val n = readLine().toInt()
val arr = readLine().split(" ").map { it.toLong() }.sorted()
repeat(n) {
val pointer = IntArray(2)
pointer[1] = n - 1
while (pointer[0] < pointer[1]) {
val sum = arr[pointer[0]] + arr[pointer[1]]
when {
sum == arr[it] -> {
when (it) {
pointer[0], pointer[1] -> {
if (pointer[0] == it) pointer[0]++
if (pointer[1] == it) pointer[1]--
}
else -> {
result++
break
}
}
}
sum < arr[it] -> pointer[0]++
else -> pointer[1]--
}
}
}
bw.write("$result")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
24479번: 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2024.05.10 |
---|---|
1431번: 시리얼 번호 (0) | 2024.05.10 |
20529번: 가장 가까운 세 사람의 심리적 거리 (0) | 2024.05.09 |
11403번: 경로 찾기 (0) | 2024.05.09 |
6064번: 카잉 달력 (0) | 2024.05.09 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!