๐Ÿ“Œ ํŒŒ์ด์ฌ ์œผ๋กœ ํ’€์ด

 

๐Ÿ“Œ ๋ฌธ์ œ ๋งํฌ :

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ“Œ ๋ฌธ์ œ ์„ค๋ช… :

๊ณ ๊ฐ์˜ ์•ฝ๊ด€ ๋™์˜๋ฅผ ์–ป์–ด์„œ ์ˆ˜์ง‘๋œ 1~n๋ฒˆ์œผ๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ๊ฐœ์ธ์ •๋ณด n๊ฐœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žˆ์œผ๋ฉฐ ๊ฐ ์•ฝ๊ด€๋งˆ๋‹ค ๊ฐœ์ธ์ •๋ณด ๋ณด๊ด€ ์œ ํšจ๊ธฐ๊ฐ„์ด ์ •ํ•ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ฐ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์–ด๋–ค ์•ฝ๊ด€์œผ๋กœ ์ˆ˜์ง‘๋๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด๋Š” ์œ ํšจ๊ธฐ๊ฐ„ ์ „๊นŒ์ง€๋งŒ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ํŒŒ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A๋ผ๋Š” ์•ฝ๊ด€์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด 12 ๋‹ฌ์ด๊ณ , 2021๋…„ 1์›” 5์ผ์— ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด๊ฐ€ A์•ฝ๊ด€์œผ๋กœ ์ˆ˜์ง‘๋˜์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐœ์ธ์ •๋ณด๋Š” 2022๋…„ 1์›” 4์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ 2022๋…„ 1์›” 5์ผ๋ถ€ํ„ฐ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ์˜ค๋Š˜ ๋‚ ์งœ๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด ๋ฒˆํ˜ธ๋“ค์„ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋‹ฌ์€ 28์ผ๊นŒ์ง€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์˜ค๋Š˜ ๋‚ ์งœ๊ฐ€ 2022.05.19์ผ ๋•Œ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” A์•ฝ๊ด€์— ์˜ํ•ด 2021๋…„ 11์›” 1์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ์œผ๋ฏ€๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” B์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 6์›” 28์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์•„์ง ๋ณด๊ด€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” C์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 5์›” 18์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ์œผ๋ฏ€๋กœ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  • ๋„ค ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” C์•ฝ๊ด€์— ์˜ํ•ด 2022๋…„ 5์›” 19์ผ๊นŒ์ง€ ๋ณด๊ด€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์•„์ง ๋ณด๊ด€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด ๋ฒˆํ˜ธ๋Š” [1, 3]์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฌธ์ž์—ด today, ์•ฝ๊ด€์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ๋‹ด์€ 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด terms์™€ ์ˆ˜์ง‘๋œ ๊ฐœ์ธ์ •๋ณด์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด privacies๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด์˜ ๋ฒˆํ˜ธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

๐Ÿ“Œ ์ œํ•œ ์‚ฌํ•ญ

  • today๋Š” "YYYY.MM.DD" ํ˜•ํƒœ๋กœ ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 1 ≤ terms์˜ ๊ธธ์ด ≤ 20
    • terms์˜ ์›์†Œ๋Š” "์•ฝ๊ด€ ์ข…๋ฅ˜ ์œ ํšจ๊ธฐ๊ฐ„" ํ˜•ํƒœ์˜ ์•ฝ๊ด€ ์ข…๋ฅ˜์™€ ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ณต๋ฐฑ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„ํ•œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” A~Z์ค‘ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž ํ•˜๋‚˜์ด๋ฉฐ, terms ๋ฐฐ์—ด์—์„œ ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์œ ํšจ๊ธฐ๊ฐ„์€ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ฌ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜์ด๋ฉฐ, 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • 1 ≤ privacies์˜ ๊ธธ์ด ≤ 100
    • privacies[i]๋Š” i+1๋ฒˆ ๊ฐœ์ธ์ •๋ณด์˜ ์ˆ˜์ง‘ ์ผ์ž์™€ ์•ฝ๊ด€ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • privacies์˜ ์›์†Œ๋Š” "๋‚ ์งœ ์•ฝ๊ด€ ์ข…๋ฅ˜" ํ˜•ํƒœ์˜ ๋‚ ์งœ์™€ ์•ฝ๊ด€ ์ข…๋ฅ˜๋ฅผ ๊ณต๋ฐฑ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„ํ•œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ๋‚ ์งœ๋Š” "YYYY.MM.DD" ํ˜•ํƒœ์˜ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์ˆ˜์ง‘๋œ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, today ์ด์ „์˜ ๋‚ ์งœ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
    • privacies์˜ ์•ฝ๊ด€ ์ข…๋ฅ˜๋Š” ํ•ญ์ƒ terms์— ๋‚˜ํƒ€๋‚œ ์•ฝ๊ด€ ์ข…๋ฅ˜๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • today์™€ privacies์— ๋“ฑ์žฅํ•˜๋Š” ๋‚ ์งœ์˜ YYYY๋Š” ์—ฐ๋„, MM์€ ์›”, DD๋Š” ์ผ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ (.) ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • 2000 ≤ YYYY ≤ 2022
    • 1 ≤ MM ≤ 12
    • MM์ด ํ•œ ์ž๋ฆฟ์ˆ˜์ธ ๊ฒฝ์šฐ ์•ž์— 0์ด ๋ถ™์Šต๋‹ˆ๋‹ค.
    • 1 ≤ DD ≤ 28
    • DD๊ฐ€ ํ•œ ์ž๋ฆฟ์ˆ˜์ธ ๊ฒฝ์šฐ ์•ž์— 0์ด ๋ถ™์Šต๋‹ˆ๋‹ค.
  • ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์กด์žฌํ•˜๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์ž…์ถœ๋ ฅ ์˜ˆ


์ถ”์ธก) 

๋ฌธ์ž์—ด์ธ ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ๊ฐ๊ฐ ์ž˜๋ผ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ๊ณ  datetime ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

privacies๋ฅผ for๋ฌธ์œผ๋กœ ๋Œ๋ ค ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆ˜์ง‘๋‚ ์งœ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ์ด ์•ŒํŒŒ๋ฒณ์— ๋งž๋Š” ๋‹ฌ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.

์ด ๋‹ฌ์ˆ˜๋ฅผ ์ˆ˜์ง‘๋‚ ์งœ๋ฅผ ๊ฐ์ž ์ž๋ฅธ๊ฒƒ ์ค‘ ๋‹ฌ์— ๋”ํ•ด 12๊ฐ€ ์ดˆ๊ณผํ•˜๋ฉด ๋…„์ˆ˜๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ๋‹ฌ์€ 12๋กœ ๋‚˜๋ˆ  ๊ณ„์‚ฐํ•˜๊ณ  12๊ฐ€ ์ดˆ๊ณผํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ๋ƒฅ ๋‹ฌ์— ๋”ํ•ด ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ datetime ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ ๋‹ค

์ผ์ˆ˜๋Š” ๊ธฐ๊ฐ„์ด ๋‹ฌ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฏ€๋กœ ๊ณ„์‚ฐ์—์„œ๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์œผ๋‚˜ ๋‚ ์งœ ํŒ๋ณ„์‹œ์—๋Š” ์ด ์ผ์ˆ˜ ์ด์ƒ์ด๋ฉด ๋งŒ๋ฃŒ ํŒ๋ณ„.

์˜ค๋Š˜ ๋‚ ์งœ์™€ ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์„œ๋กœ ๋น„๊ตํ•ด ์˜ค๋Š˜ ๋‚ ์งœ๊ฐ€ ๋” ํฌ๋ฉด ์ธ๋ฑ์Šค + 1 (๋ช‡๋ฒˆ์งธ๊ฒƒ์„ ๋งŒ๋ฃŒํ•ด์•ผํ•˜๋Š”์ง€ ๋ฆฌํ„ดํ•ด์•ผํ•˜๋ฏ€๋กœ) ํ•œ ๊ฐ’์„ ๋ฐฐ์—ด์— appendํ•ด ๋ฆฌํ„ด 

 

์†Œ์Šค์ฝ”๋“œ) 

* 1์ฐจ) ์ •ํ™•์„ฑ 25์ . ์‹คํŒจ ์ผ€์ด์Šค 7๋ฒˆ ๋นผ๊ณ ๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ

import datetime

def solution(today, terms, privacies):
    result = []

    today_list = today.split('.')
    today_int_list = [int(one) for one in today_list]
    today = datetime.date(today_int_list[0], today_int_list[1], today_int_list[2])

    for i in range(len(privacies)) :
        term_alphabet = privacies[i][-1]
        month = 0
        expired_date = privacies[i][0:-2]
        date = ""

        for term in terms :
            if term[0] == term_alphabet :
                month = term[2:]

        data = expired_date.split('.')
        data = [int(one) for one in data]
        plus_month = data[1] + int(month)
        if plus_month > 12 :
            data[0] = data[0]+1
            data[1] = plus_month % 12
        else :
            data[1] = plus_month

        if today >= datetime.date(data[0], data[1], data[2]) :
            result.append(i+1)

    return result

2์ฐจ) ์„ฑ๊ณต : ๋ฉ”๋ชจ๋ฆฌ: 10.3 MB, ์‹œ๊ฐ„: 0.34 ms

def solution(today, terms, privacies):
    result = []
    t_year, t_month, t_day = today.split('.')

    for i in range(len(privacies)) :
        days = 0
        term_alphabet = privacies[i][-1]
        c_year, c_month, c_day = privacies[i][0:-2].split('.')

        for term in terms :
            if term[0] == term_alphabet :
                days = int(term[2:])*28

        print(days)

        diff_year = int(t_year) - int(c_year)
        diff_month = int(t_month) - int(c_month)
        diff_day = int(t_day) - int(c_day)
        diff_days = (diff_year * 28 * 12) + (diff_month * 28) + diff_day

        if diff_days >= days :
            result.append(i+1)

    return result

 

๋ฆฌ๋ทฐ) 

์ฒซ๋ฒˆ์งธ์—์„œ for๋ฌธ์ด๋ผ๋˜๊ฐ€ datetime์œผ๋กœ ๋ฐ”๊พผ๋‹ค๋˜๊ฐ€ ํ•˜๋Š” ์‹ ๋“ฑ์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฑธ ๋‹ค ์ค„์—ฌ๋ณด๋ ค๊ณ  ์ „์ฒด์  ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋ฐ”๊ฟˆ.

์• ์ดˆ์— ํ•œ๋‹ฌ์ด 28์ผ๋กœ ๊ฐ€์ •ํ•˜๋Š”๊ฑฐ๋ผ ๊ธฐ์กด datetime์œผ๋กœ ๋ฐ”๊ฟ”์„œ ๋น„๊ตํ•˜๋Š”๊ฒƒ ๋ณด๋‹ค๋Š” ๊ณ„์‚ฐ์‹์„ ๋งŒ๋“œ๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ทธ๋Ÿผ ์ด๊ฑธ ์–ด๋–ค์‹์œผ๋กœ ๋ฐ”๊ฟ€๊นŒ ํ•˜๋‹ค๊ฐ€, ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ๋‚ ์งœ๋กœ ํ‘œ์‹œํ•˜๊ณ , ํ˜„์žฌ ๋‚ ์งœ - ์ˆ˜์ง‘ํ•œ ๋‚ ์งœ๋ฅผ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ ์ฐจ์ด๋ž‘ ๋น„๊ตํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์„œ ์ด์ชฝ ์ฒ˜๋ฆฌ๋กœ ๋ณ€๊ฒฝ

์ฝ”๋“œ๋„ ํ›จ์”ฌ ๊ฐ„๋‹จ ๋ช…๋ฃŒํ•ด์ง

+ Recent posts