ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋ฌธ์ œ

 

2110๋ฒˆ: ๊ณต์œ ๊ธฐ ์„ค์น˜

์ฒซ์งธ ์ค„์— ์ง‘์˜ ๊ฐœ์ˆ˜ N (2 ≤ N ≤ 200,000)๊ณผ ๊ณต์œ ๊ธฐ์˜ ๊ฐœ์ˆ˜ C (2 ≤ C ≤ N)์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์ง‘์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” xi (1 ≤ xi ≤ 1,000,000,000)๊ฐ€

www.acmicpc.net


โœ๐Ÿป ํ’€์ด

๐ŸŽจ Go

// https://www.acmicpc.net/problem/2110
// ์ด๋ถ„ ํƒ์ƒ‰์„ ์‘์šฉํ•˜์—ฌ ์ตœ์†Ÿ๊ฐ’์ด๋‚˜ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ 3
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n, c int
	fmt.Fscanln(reader, &n, &c)

	var x = make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscanln(reader, &x[i])
	}

	sort.Ints(x)
	fmt.Fprintln(writer, getRouterDistacne(x, c))
}

func getRouterDistacne(x []int, c int) (dist int) {
	var start = 1                // ์ตœ์†Œ ๊ฐ„๊ฒฉ
	var end = x[len(x)-1] - x[0] // ์ตœ๋Œ€ ๊ฐ„๊ฒฉ

	for start <= end {
		mid := (start + end) / 2
		prev := x[0]
		count := 1

		for i := 1; i < len(x); i++ {
			temp := x[i] - prev
			if mid <= temp {
				count++
				prev = x[i]
			}
		}

		if count >= c {
			dist = mid
			start = mid + 1 // ๊ฐ„๊ฒฉ์„ ๋„“ํžŒ๋‹ค
		} else {
			end = mid - 1 // ๊ฐ„๊ฒฉ์„ ์ขํžŒ๋‹ค
		}
	}
	return
}

๐ŸŽจ Python3

# https://www.acmicpc.net/problem/2110
# ์ด๋ถ„ ํƒ์ƒ‰์„ ์‘์šฉํ•˜์—ฌ ์ตœ์†Ÿ๊ฐ’์ด๋‚˜ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ 3
import sys

def get_router_distance(x, c):
    start = 1
    end = x[-1]-x[0]
    dist = 0

    while start <= end:
        mid = (start + end) // 2
        prev = x[0]
        count = 1
        for i in range(len(x)):
            temp = x[i] - prev
            if mid <= temp :
                count += 1
                prev = x[i]

        if count >= c:
            dist = mid
            start = mid + 1
        else:
            end = mid - 1
    return dist


if __name__ == "__main__":
    n, c = map(int, sys.stdin.readline().split())
    x = []
    for i in range(n):
        x.append(int(sys.stdin.readline()))
    x.sort()
    print(get_router_distance(x, c))
728x90
๋Œ“๊ธ€