PS(Problem Solving)/BOJ

[백준/BOJ] 10093번: 숫자

JunsuKim 2021. 11. 25.
728x90

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

 

10093번: 숫자

두 양의 정수가 주어졌을 때, 두 수 사이에 있는 정수를 모두 출력하는 프로그램을 작성하시오.

www.acmicpc.net

문제

두 양의 정수가 주어졌을 때, 두 수 사이에 있는 정수를 모두 출력하는 프로그램을 작성하시오.

입력

두 정수 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로 나누었다.

  1.  a = b일 때
    -> 사이에 수가 없으므로 0을 출력하면 된다.
  2. a > b일 때
    -> 사이에 있는 수의 개수를 구하기 위해 a - b - 1을 출력하고 a와 b가 같지 않을 때까지 b에 1을 더하며 출력을 한다.
  3. 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

댓글