728x90
https://www.acmicpc.net/problem/10093
문제
두 양의 정수가 주어졌을 때, 두 수 사이에 있는 정수를 모두 출력하는 프로그램을 작성하시오.
입력
두 정수 A와 B가 주어진다.
출력
첫째 줄에 두 수 사이에 있는 수의 개수를 출력한다.
둘째 줄에는 두 수 사이에 있는 수를 오름차순으로 출력한다.
서브태스크
번호 | 배점 | 제한 |
1 | 30 | 1 ≤ A, B ≤ 1000. |
2 | 70 | 1 ≤ A, B ≤ 1015, A와 B의 차이는 최대 100,000. |
예제 입력1
8 14
예제 출력1
5
9 10 11 12 13
해설
서브태스크를 모두 만족시키기 위해서 BigInteger를 사용하였다.
우선 크게 3가지 경우인 a = b, a > b, a < b로 나누었다.
- a = b일 때
-> 사이에 수가 없으므로 0을 출력하면 된다. - a > b일 때
-> 사이에 있는 수의 개수를 구하기 위해 a - b - 1을 출력하고 a와 b가 같지 않을 때까지 b에 1을 더하며 출력을 한다. - a < b일 때
-> 개수를 구하기 위해 b- a -1을 하고 a에 1을 더하며 출력한다.
소스 코드
import java.lang.StringBuilder
import java.math.BigInteger
import java.util.*
fun main() {
val st = StringTokenizer(readLine())
var a = BigInteger(st.nextToken())
var b = BigInteger(st.nextToken())
val sb = StringBuilder()
if(a == b) sb.append(0)
else if(a < b){
var temp = a
sb.append("${b.subtract(a).subtract(BigInteger.ONE)}\n")
while(a != b.subtract(BigInteger.ONE)){
temp = a.add(BigInteger.ONE)
sb.append("$temp ")
a = temp
}
}
else{
var temp = b
sb.append("${a.subtract(b).subtract(BigInteger.ONE)}\n")
while(b != a.subtract(BigInteger.ONE)) {
temp = b.add(BigInteger.ONE)
sb.append("$temp ")
b = temp
}
}
println(sb.toString())
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 10773번: 제로 (0) | 2021.11.28 |
---|---|
[백준/BOJ] 10828번: 스택 (0) | 2021.11.28 |
[백준/BOJ] 11034번: 캥거루 세마리2 (0) | 2021.11.23 |
[백준/BOJ] 11718번: 그대로 출력하기 (0) | 2021.11.23 |
[백준/BOJ] 4619번: 루트 (0) | 2021.11.22 |
댓글