Programmers, ๊ธฐ์ง€๊ตญ ์„ค์น˜

2021. 11. 29. 18:53ใ†ETC/Algorithm

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

 

๋ฌธ์ œ ์„ค๋ช…

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๋ฒˆ์งธ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ, ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

  • 3๊ฐœ์˜ ์•„ํŒŒํŠธ๋ณด๋‹ค ๋” ๋งŽ์€ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ์—๋„ ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

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

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

 

์ œํ•œ์‚ฌํ•ญ
  • N: 200,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • stations์˜ ํฌ๊ธฐ: 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • stations๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ณ , ๋ฐฐ์—ด์— ๋‹ด๊ธด ์ˆ˜๋Š” N๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • W: 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
 
์ž…์ถœ๋ ฅ ์˜ˆ
 
N stations W answer
11 [4, 11] 1 3
16 [9] 2 3

 

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

  • ์ดˆ๊ธฐ์—, 1~6, 12~16๋ฒˆ์งธ ์•„ํŒŒํŠธ์—๋Š” ์ „ํŒŒ๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

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

 

 
 
 

 

๋ฌธ์ œ ํ•ด๊ฒฐ

C++

int solution(int n, vector<int> stations, int w) {
    int answer = 0, start = 1;
    
    for (int i=0; i < stations.size(); i++) {
        if (start < stations[i]-w)
            answer += ceil(double((stations[i]-w) - start) / double(2*w+1));
        start = stations[i]+w+1;
    }

    if (start < n+1) answer += ceil(double(n+1 - start) / double(2*w+1));
        
    return answer;
}

 

 

Python

from math import ceil

def solution(n, stations, w):
    answer = 0
    start = 1
    
    for i in range(len(stations)):
        if start < stations[i]-w :
            answer += ceil(((stations[i]-w) - start) / (2*w+1));
        start = stations[i]+w+1;
        
    
    if start < n+1: answer += ceil(((n+1) - start) / (2*w+1));
        
    return answer