๊ฐœ๋ฐœ์ผ์ง€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level1. ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„ ๋ณธ๋ฌธ

Algorithm๐Ÿ”จ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level1. ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„

doublejune 2024. 9. 23. 21:11

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

 

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

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

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

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

์•ฝ๊ด€ ์ข…๋ฅ˜ ์œ ํšจ๊ธฐ๊ฐ„
A 6 ๋‹ฌ
B 12 ๋‹ฌ
C 3 ๋‹ฌ
๋ฒˆํ˜ธ ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์ผ์ž ์•ฝ๊ด€ ์ข…๋ฅ˜
1 2021.05.02 A
2 2021.07.01 B
3 2022.02.19 C
4 2022.02.20 C
์ฒซ ๋ฒˆ์งธ ๊ฐœ์ธ์ •๋ณด๋Š” 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์ด ๋ถ™์Šต๋‹ˆ๋‹ค.
ํŒŒ๊ธฐํ•ด์•ผ ํ•  ๊ฐœ์ธ์ •๋ณด๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์กด์žฌํ•˜๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

B. ๋‹ต์•ˆ

def solution(today, terms, privacies):
    answer = []
    dict_terms = {}
    
    for term in terms:
        term_arr = term.split(" ")
        dict_terms[term_arr[0]] = int(term_arr[1])
    
    for i, privacy in enumerate(privacies):
        privacy_arr = privacy.split(" ")
        if dispose_privacy_or_not(today, privacy_arr[0], dict_terms[privacy_arr[1]]):
            answer.append(i+1);
    
    return answer

def dispose_privacy_or_not(today, privacy , validation_months):
    today_arr = today.split(".")
    privacy_arr = privacy.split(".")
    
    passed_months= (int(today_arr[0])-int(privacy_arr[0]))*12 + int(int(today_arr[1])-int(privacy_arr[1]))
    if int(today_arr[2]) >= int(privacy_arr[2]):
        passed_months+=1
    
    return passed_months > validation_months

C. ๊ฐœ์„ 

1. ๋น„๊ต๊ธฐ์ค€์„ Months๊ฐ€ ์•„๋‹Œ days๋กœ.

: ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ๋Š”์ง€ ๊ฒ€์ฆ์„ ํ•  ๋•Œ, ๋‚˜๋Š” Months๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ–ˆ๋‹ค. ์•ฝ๊ด€์— ๋”ฐ๋ผ ์ฃผ์–ด์ง„ ์œ ํšจ๊ธฐ๊ฐ„์˜ ๊ธฐ์ค€์ด "Months"๊ธฐ์ค€์ด์–ด์„œ ํฐ ์ƒ๊ฐ ์—†์ด ๊ทธ๋ ‡๊ฒŒ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ months ๊ธฐ์ค€์œผ๋กœ ํ•  ์‹œ days๋ฅผ ๋น„๊ตํ•ด month๋ฅผ +1ํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋กœ์ง์ด ๋“ค์–ด๊ฐ€์•ผํ•œ๋‹ค. but, days๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๋Œ€์†Œ๋น„๊ต๋ฅผ ํ•œ๋ฒˆ์— ํ•  ์ˆ˜ ์žˆ๋‹ค.