๐Ÿ–ฅ๏ธ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/Python

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] [Python] [PCCP ๊ธฐ์ถœ๋ฌธ์ œ] 1๋ฒˆ / ๋™์˜์ƒ ์žฌ์ƒ๊ธฐ

rtw0202 2026. 2. 28. 20:39

1. ๋ฌธ์ œ ์„ค๋ช…

๋‹น์‹ ์€ ๋™์˜์ƒ ์žฌ์ƒ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ๋™์˜์ƒ ์žฌ์ƒ๊ธฐ๋Š” 10์ดˆ ์ „์œผ๋กœ ์ด๋™, 10์ดˆ ํ›„๋กœ ์ด๋™, ์˜คํ”„๋‹ ๊ฑด๋„ˆ๋›ฐ๊ธฐ 3๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • 10์ดˆ ์ „์œผ๋กœ ์ด๋™: ์‚ฌ์šฉ์ž๊ฐ€ "prev" ๋ช…๋ น์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ ๋™์˜์ƒ์˜ ์žฌ์ƒ ์œ„์น˜๋ฅผ ํ˜„์žฌ ์œ„์น˜์—์„œ 10์ดˆ ์ „์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์œ„์น˜๊ฐ€ 10์ดˆ ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ ์˜์ƒ์˜ ์ฒ˜์Œ ์œ„์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์˜์ƒ์˜ ์ฒ˜์Œ ์œ„์น˜๋Š” 0๋ถ„ 0์ดˆ์ž…๋‹ˆ๋‹ค.
  • 10์ดˆ ํ›„๋กœ ์ด๋™: ์‚ฌ์šฉ์ž๊ฐ€ "next" ๋ช…๋ น์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ ๋™์˜์ƒ์˜ ์žฌ์ƒ ์œ„์น˜๋ฅผ ํ˜„์žฌ ์œ„์น˜์—์„œ 10์ดˆ ํ›„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋™์˜์ƒ์˜ ๋‚จ์€ ์‹œ๊ฐ„์ด 10์ดˆ ๋ฏธ๋งŒ์ผ ๊ฒฝ์šฐ ์˜์ƒ์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์˜์ƒ์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋Š” ๋™์˜์ƒ์˜ ๊ธธ์ด์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์˜คํ”„๋‹ ๊ฑด๋„ˆ๋›ฐ๊ธฐ: ํ˜„์žฌ ์žฌ์ƒ ์œ„์น˜๊ฐ€ ์˜คํ”„๋‹ ๊ตฌ๊ฐ„(op_start ≤ ํ˜„์žฌ ์žฌ์ƒ ์œ„์น˜ ≤ op_end)์ธ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์˜คํ”„๋‹์ด ๋๋‚˜๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๋™์˜์ƒ์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด video_len, ๊ธฐ๋Šฅ์ด ์ˆ˜ํ–‰๋˜๊ธฐ ์ง์ „์˜ ์žฌ์ƒ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด pos, ์˜คํ”„๋‹ ์‹œ์ž‘ ์‹œ๊ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด op_start, ์˜คํ”„๋‹์ด ๋๋‚˜๋Š” ์‹œ๊ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด op_end, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด commands๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด ๋ชจ๋‘ ๋๋‚œ ํ›„ ๋™์˜์ƒ์˜ ์œ„์น˜๋ฅผ "mm:ss" ํ˜•์‹์œผ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • video_len์˜ ๊ธธ์ด = pos์˜ ๊ธธ์ด = op_start์˜ ๊ธธ์ด = op_end์˜ ๊ธธ์ด = 5
    • video_len, pos, op_start, op_end๋Š” "mm:ss" ํ˜•์‹์œผ๋กœ mm๋ถ„ ss์ดˆ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • 0 ≤ mm ≤ 59
    • 0 ≤ ss ≤ 59
    • ๋ถ„, ์ดˆ๊ฐ€ ํ•œ ์ž๋ฆฌ์ผ ๊ฒฝ์šฐ 0์„ ๋ถ™์—ฌ ๋‘ ์ž๋ฆฌ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ๋น„๋””์˜ค์˜ ํ˜„์žฌ ์œ„์น˜ ํ˜น์€ ์˜คํ”„๋‹์ด ๋๋‚˜๋Š” ์‹œ๊ฐ์ด ๋™์˜์ƒ์˜ ๋ฒ”์œ„ ๋ฐ–์ธ ๊ฒฝ์šฐ๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์˜คํ”„๋‹์ด ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ์€ ํ•ญ์ƒ ์˜คํ”„๋‹์ด ๋๋‚˜๋Š” ์‹œ๊ฐ๋ณด๋‹ค ์ „์ž…๋‹ˆ๋‹ค.
  • 1 ≤ commands์˜ ๊ธธ์ด ≤ 100
    • commands์˜ ์›์†Œ๋Š” "prev" ํ˜น์€ "next"์ž…๋‹ˆ๋‹ค.
    • "prev"๋Š” 10์ดˆ ์ „์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค.
    • "next"๋Š” 10์ดˆ ํ›„๋กœ ์ด๋™ํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค.

 

2. ์ถœ๋ ฅ ์˜ˆ์‹œ

 

3. ๋ฌธ์ œ ๋‹ต์•ˆ

def solution(video_len, pos, op_start, op_end, commands):
    def get_total_seconds(t):
        total_seconds = int(t[0:2]) * 60 + int(t[3:5])
        return total_seconds
    
    video_t = get_total_seconds(video_len)
    op_start_t = get_total_seconds(op_start)
    op_end_t = get_total_seconds(op_end)
    pos_t = get_total_seconds(pos)
    
    # ์˜คํ”„๋‹ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
    def check_and_skip_opening(pos_t):
        if op_start_t <= pos_t <= op_end_t:
            pos_t = op_end_t
        return pos_t
    
    for c in commands:
        # 10์ดˆ ์ „์œผ๋กœ ์ด๋™
        if c == "prev":
            pos_t = check_and_skip_opening(pos_t)
            if pos_t < 10:
                pos_t = 0
            else:
                pos_t -= 10
            pos_t = check_and_skip_opening(pos_t)

        # 10์ดˆ ํ›„๋กœ ์ด๋™
        if c == "next":
            pos_t = check_and_skip_opening(pos_t)
            if video_t - pos_t < 10:
                pos_t = video_t
            else:
                pos_t += 10
            pos_t = check_and_skip_opening(pos_t)
    
    minutes = pos_t // 60
    seconds = pos_t % 60
    
    return f"{minutes:02d}:{seconds:02d}"