Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 2170๋ฒˆ - ์„ ๊ธ‹๊ธฐ (์‹œ๊ฐ„์ดˆ๊ณผ ๋ณด๋ฅ˜, ๊ณจ๋“œ5, ๊ทธ๋ฆฌ๋””)

๊ฐ์ž ๐Ÿฅ” 2023. 5. 18. 18:55
๋ฐ˜์‘ํ˜•

์•„์ฃผ ์‰ฝ๊ฒŒ ํ’€๋ฆด์ค„ ์•Œ๊ณ  ๋ธ”๋กœ๊ทธ ์—…๋กœ๋“œ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ... ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค.
๊ทผ๋ฐ, ์ด๊ฒƒ์ €๊ฒƒ ์ฐพ์•„๋ณด๊ณ  ๋ฐฑ์ค€์„ ๋’ค์ ธ๋ณด๋‹ˆ, ์ด ๋ฌธ์ œ๋Š” ๋ญ”๊ฐ€ swift๋กœ ํ’€ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ ์ธ๊ฒƒ ๊ฐ™๋‹ค๋Š” ํŒ๋‹จ์ด ๋‚ด๋ ค์กŒ๋‹ค. (๋‚ด ์Šค์Šค๋กœ)

โฐ ์™œ ์‹œ๊ฐ„์ดˆ๊ณผ ๋ณด๋ฅ˜?

๋ญ”๊ฐ€ ์ด ๋ฌธ์ œ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋ผ๋Š” ํŒ๋‹จ์ด ์„ฐ๋‹ค. ์™œ๋ƒ๋ฉด?

1. ์ผ๋‹จ, ๋‚˜๋Š” ํ’€์ด๊ณผ์ •์— ์ž˜๋ชป๋œ ์ ์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค.

์ธํ„ฐ๋„ท์„ ์ฐพ์•„๋ณด๋‹ˆ ๋‚˜์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ‘ผ C++, python๋“ฑ์˜ ๋ชจ๋“  ์ฝ”๋“œ๋“ค์€ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด swift๋กœ ํ’€์—ˆ์„๋•Œ ์ด ํ’€์ด๊ณผ์ •์ด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ง์ด ๋˜์ง€ ์•Š์•˜๋‹ค. 

2. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N)์ธ๋ฐ, 100๋งŒ์ด ํ†ต๊ณผ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ดํ•ดํ•  ์ˆ˜ ์—†๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์Šค์œ„ํ”„ํŠธ๋กœ ํ‘ผ ๋ฌธ์ œ๋“ค๋กœ ๋ณด์•˜์„ ๋•Œ, 1์ดˆ๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค๋ฉด O(N), O(1)์ด๋ฉด ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ์™œ ์ด ๋ฌธ์ œ๋งŒ ํ†ต๊ณผ๊ฐ€ ํž˜๋“ค๋‹ค๋Š” ๊ฒƒ์ผ๊นŒ? ์šฐ์„  ๋ฐฑ์ค€์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์Šค์œ„ํ”„ํŠธ๊ฐ€ ํƒ€ ์–ธ์–ด๋ณด๋‹ค ์กฐ๊ธˆ ๋Š๋ฆฌ๊ณ  ์„ฑ๋Šฅ์ด ๊ตฌ๋ฆฌ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์•Œ๊ณ  ์žˆ๋‹ค. ๋Š๋ฆฌ๋‹ค๊ณ  ์†Œ๋ฌธ๋‚œ ํŒŒ์ด์ฌ๊ณผ ๋‹น์žฅ ๋น„๊ตํ•ด๋ณด์•˜์„๋•Œ, ํŒŒ์ด์ฌ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ์Šค์œ„ํ”„ํŠธ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‹œ๊ฐ„์ด ํ›จ์”ฌ ๊ธธ๋‹ค๊ณ  ํ•œ๋‹ค. (๋ฐฑ์ค€์—์„œ)

๊ทธ๋ž˜์„œ, ๋‚˜๋Š” ์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ Solution()์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋งˆ์ง€๋ง‰์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ, ํ•จ์ˆ˜ํ˜ธ์ถœ๋ฐฉ์‹์„ ์ง€์šฐ๊ณ  print๋กœ ๋ฐ”๋กœ๋ฝ‘์•„๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™๋‹ค. 

์ผ๋‹จ,, ์ด ๋ฌธ์ œ๋Š” ๋ณด๋ฅ˜,,,,


โšซ๏ธ ๋ฌธ์ œ

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

 

2170๋ฒˆ: ์„  ๊ธ‹๊ธฐ

์ฒซ์งธ ์ค„์— ์„ ์„ ๊ทธ์€ ํšŸ์ˆ˜ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์„ ์„ ๊ทธ์„ ๋•Œ ์„ ํƒํ•œ ๋‘ ์ ์˜ ์œ„์น˜ x, y (-1,000,000,000 ≤ x < y ≤ 1,000,000,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

โšซ๏ธ ํ’€์ด ๋ฐฉ๋ฒ•

ํ’€์ด ๋ฐฉ๋ฒ•์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์–ด์ง„ input๋“ค์„ x๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ํ•ด์ค€ ๋’ค, end์ง€์ ์„ ํ™•์ธํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค. end๊นŒ์ง€ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋ฉด end๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ๊ณ , ๋งŒ์•ฝ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๋Š๊ฒจ์žˆ๋‹ค๋ฉด start์™€ end๋ชจ๋‘ ์ƒˆ๋กญ๊ฒŒ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ‘ผ ์ฒซ๋ฒˆ์งธ ํ’€์ด,, - ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค.

import Foundation

private func solution() -> Int {
    let n = Int(readLine()!)!
    var xy = [[Int]]()

    for _ in 0..<n {
        xy.append(readLine()!.split(separator: " ").map{ Int($0)! })
    }

    xy = xy.sorted{ $0[0] < $1[0] }

    var answer = 0
    var start = xy[0][0]
    var end = xy[0][1]

    for i in 1..<n {
        if end < xy[i][0] {
            answer += end - start
            start = xy[i][0]
            end = xy[i][1]
        } else {
            if xy[i][1] <= end {
                continue
            } else {
                end = xy[i][1]
            }
        }
    }

    answer += end - start
    return answer
}

print(solution())

๋ฌผ๋ก , ์‹œ๊ฐ„์„ ์•„์˜ˆ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํ‘ผ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋‹จ์ผ for๋ฌธ๋งŒ์„ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด์—ˆ๊ณ  N์€ 100๋งŒ ์ดํ•˜๋กœ ๋“ค์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ฌด๋ฆฌ for๋ฌธ์„ ์ตœ๋Œ€๋กœ ๋Œ๋ ค๋„ 100๋งŒํšŒ ์ดํ•˜์ผ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๊ณ , ์ด๋ ‡๊ฒŒ ๋˜๋ฉด 1์ดˆ๋Š” ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. (O(N)) ๊ทผ๋ฐ ์›จ์•Š๋˜...

 

 

๋ฐ˜์‘ํ˜•