๊ฐœ๋ฐœ์ž HOON
๐Ÿ› HOON DEVLog
๊ฐœ๋ฐœ์ž HOON
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ˜Ž ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ (137)
    • ๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„ (7)
    • ๐Ÿฆ” ์ทจ์—…์ค€๋น„ ๊ธฐ๋ก (7)
    • โ˜• ์ž๋ฐ” : JAVA (5)
    • ๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS (80)
    • ๐ŸŒฑ ๋ฐฑ์—”๋“œ : Backend (13)
    • ๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS (11)
    • ๐Ÿ—‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : DB (1)
    • ๐Ÿƒ‍โ™‚๏ธ DEVLOG (8)
    • โš™๏ธ Trouble Shooting (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • GitHub
  • Resume

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๊ฐœ๋ฐœ์ž HOON

๐Ÿ› HOON DEVLog

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ธฐ์ง€๊ตญ ์„ค์น˜ (level3, python)
๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ธฐ์ง€๊ตญ ์„ค์น˜ (level3, python)

2022. 9. 25. 20:32

๋ฌธ์ œ ์„ค๋ช…

N๊ฐœ์˜ ์•„ํŒŒํŠธ๊ฐ€ ์ผ๋ ฌ๋กœ ์ญ‰ ๋Š˜์–ด์„œ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘์—์„œ ์ผ๋ถ€ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์—๋Š” 4g ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•ด 5g ์ˆ˜์š”๊ฐ€ ๋†’์•„์ ธ 4g ๊ธฐ์ง€๊ตญ์„ 5g ๊ธฐ์ง€๊ตญ์œผ๋กœ ๋ฐ”๊พธ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ 5g ๊ธฐ์ง€๊ตญ์€ 4g ๊ธฐ์ง€๊ตญ๋ณด๋‹ค ์ „๋‹ฌ ๋ฒ”์œ„๊ฐ€ ์ข์•„, 4g ๊ธฐ์ง€๊ตญ์„ 5g ๊ธฐ์ง€๊ตญ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์–ด๋–ค ์•„ํŒŒํŠธ์—๋Š” ์ „ํŒŒ๊ฐ€ ๋„๋‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด 11๊ฐœ์˜ ์•„ํŒŒํŠธ๊ฐ€ ์ญ‰ ๋Š˜์–ด์„œ ์žˆ๊ณ , [4, 11] ๋ฒˆ์งธ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์—๋Š” 4g ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด 4g ๊ธฐ์ง€๊ตญ์ด ์ „ํŒŒ ๋„๋‹ฌ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ธ 5g ๊ธฐ์ง€๊ตญ์œผ๋กœ ๋ฐ”๋€” ๊ฒฝ์šฐ ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (์ „ํŒŒ์˜ ๋„๋‹ฌ ๊ฑฐ๋ฆฌ๊ฐ€ W์ผ ๋•, ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋œ ์•„ํŒŒํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ „ํŒŒ๋ฅผ ์–‘์ชฝ์œผ๋กœ W๋งŒํผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

 

  • ์ดˆ๊ธฐ์—, 1, 2, 6, 7, 8, 9๋ฒˆ์งธ ์•„ํŒŒํŠธ์—๋Š” ์ „ํŒŒ๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 1, 7, 9๋ฒˆ์งธ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ, ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋” ๋งŽ์€ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•˜๋ฉด ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋•Œ, ์šฐ๋ฆฌ๋Š” 5g ๊ธฐ์ง€๊ตญ์„ ์ตœ์†Œ๋กœ ์„ค์น˜ํ•˜๋ฉด์„œ ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„  ์ตœ์†Œ 3๊ฐœ์˜ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•ด์•ผ ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์•„ํŒŒํŠธ์˜ ๊ฐœ์ˆ˜ N, ํ˜„์žฌ ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋œ ์•„ํŒŒํŠธ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด 1์ฐจ์› ๋ฐฐ์—ด stations, ์ „ํŒŒ์˜ ๋„๋‹ฌ ๊ฑฐ๋ฆฌ W๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ฆ์„คํ•ด์•ผ ํ•  ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”


์ œํ•œ์‚ฌํ•ญ
  • N: 200,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • stations์˜ ํฌ๊ธฐ: 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • stations๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ณ , ๋ฐฐ์—ด์— ๋‹ด๊ธด ์ˆ˜๋Š” N๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • W: 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

 

์ž…์ถœ๋ ฅ ์˜ˆ #1
๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค

 

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ์ดˆ๊ธฐ์—, 1~6, 12~16๋ฒˆ์งธ ์•„ํŒŒํŠธ์—๋Š” ์ „ํŒŒ๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 3, 6, 14๋ฒˆ์งธ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ’€์ด ์ฝ”๋“œ

import math

def solution(n, stations, w):
    answer = 0
    rest = []
    
    before_end = 0
    for s in stations:
        start, end = max(s-w,1), min(s+w, n)
        if not before_end:
            rest.append(start - 1)
            before_end = end
        else:
            if before_end+1 < start:
                # ์•ˆ ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ
                rest.append(start - before_end - 1)
            before_end = end
                
    rest.append(n-before_end)
    
    for r in rest:
        cover = 1 + 2 * w
        answer += math.ceil(r / cover)

    return answer

 

์ˆ˜ํ•™ ๊ตฌํ˜„ ๋ฐ ์•„์ด๋””์–ด ๊ตฌํ˜„์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

๊ธฐ๋ณธ์ ์œผ๋กœ N์€ ์ตœ๋Œ€ 2์–ต์ด๋ฏ€๋กœ, ์™„์ „ํƒ์ƒ‰์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๋˜ํ•œ stations ์—ญ์‹œ 10,000์ด๋ฏ€๋กœ stations์— ๋Œ€ํ•œ ๋ฐ˜๋ณต๋ฌธ์ด O(N^2)์ด ๋˜๋ฉด ์•ˆ ๋œ๋‹ค.

 

ํ•„์ž๋Š” ์šฐ์„ , ์„ค์น˜๋œ ๊ธฐ์ง€๊ตญ์ด ๊ฐ€์šฉํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์˜ ์ˆ˜๋ฅผ ์„ธ๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ๊ฒฝ์šฐ๋ผ๋ฉด ๊ฐ€์šฉ๋˜์ง€ ์•Š์€ ๋ฒ”์œ„๋Š” 1~6, 12~16์ด๋ฏ€๋กœ [6, 5]๋ฅผ ์–ป์–ด๋‚ด๋ ค๊ณ  ํ•œ๋‹ค.

์ค‘์š”ํ•œ ์ ์€, stations์˜ ๋‚ด๋ถ€ ์›์†Œ๋Š” ์ด๋ฏธ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜์–ด์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

๋”ฐ๋ผ์„œ sorting ์—†์ด ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๊ฒน์น˜๋Š” ๋ฒ”์œ„์— ๋Œ€ํ•ด ์ˆ˜์‹์œผ๋กœ ์•Œ์•„๋‚ผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

์ด์ „์˜ ๊ฐ€์šฉ๋ฒ”์œ„ ๋ ์ง€์  + 1 < ํ˜„์žฌ ๊ฐ€์šฉ๋ฒ”์œ„ ์‹œ์ž‘ ์ง€์ ์ด๋ผ๋ฉด ์ด์ „ ๊ธฐ์ง€๊ตญ๊ณผ ๊ฐ€์šฉ๋ฒ”์œ„๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๊ณ ,

์‚ฌ์ด์— ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธด๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์ด ์ ์„ ํ†ตํ•ด rest ๋ผ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ตœ์ข…์ ์œผ๋กœ, ํ•œ ๊ธฐ์ง€๊ตญ์ด ๊ฐ€์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฒ”์œ„๋Š” 1 + 2 * w์ด๋‹ค.

๊ฐ€์šด๋ฐ์— ์„ค์น˜ํ•˜๊ณ , ์–‘ ๋ฐฉํ–ฅ์œผ๋กœ w ๋งŒํผ ์ „ํŒŒ๋ฅผ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ rest ๋ฐฐ์—ด ๋‚ด์˜ ์›์†Œ r์— ๋Œ€ํ•ด 1 + 2 * w๋กœ ๋‚˜๋ˆ ์ฃผ๊ณ , ์˜ฌ๋ฆผ ์—ฐ์‚ฐ์„ ํ•ด์ฃผ์–ด ๋‹ต์— ๋ฐ˜์˜ํ–ˆ๋‹ค.

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž (level3, python)  (0) 2022.09.27
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์‚ผ๊ฐ ๋‹ฌํŒฝ์ด (level2, python)  (0) 2022.09.26
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 124 ๋‚˜๋ผ์˜ ์ˆซ์ž (level2, python)  (1) 2022.09.25
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฟผ๋“œ์••์ถ• ํ›„ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ (level2, python)  (1) 2022.09.23
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ˆซ์ž ๊ฒŒ์ž„ (level3, python)  (1) 2022.09.20
    '๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž (level3, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์‚ผ๊ฐ ๋‹ฌํŒฝ์ด (level2, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 124 ๋‚˜๋ผ์˜ ์ˆซ์ž (level2, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฟผ๋“œ์••์ถ• ํ›„ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ (level2, python)
    ๊ฐœ๋ฐœ์ž HOON
    ๊ฐœ๋ฐœ์ž HOON
    ์ข‹์€ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก์„ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค. # ์ฃผ๋‹ˆ์–ด # ๋ฐฑ์—”๋“œ # ๊ฐœ๋ฐœ์ž

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”