๐Ÿค–/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | Lv1] ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„ (Python) - 2023 KAKAO BLIND RECRUITMENT

sssbin 2023. 1. 7. 21:58

https://school.programmers.co.kr/learn/courses/30/lessons/150370

 

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

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

programmers.co.kr

 

๋‚˜์˜จ์ง€ ์–ผ๋งˆ ์•ˆ ๋œ ๋ฌธ์ œ!

๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ•œ๋ฐ ๋ฌธ์ž์—ด๋กœ ํ‘ธ๋А๋ผ ๋จธ๋ฆฌ ๊นจ์ง€๋Š” ์ค„ ์•Œ์•˜๋‹คใ…  ์ˆซ์ž๋กœ ํ•˜๋ฉด ์‰ฝ๋‹ค,,!

 

(์ฒ˜์Œ ํ‘ผ ๋ฐฉ๋ฒ•)- ๋ฌธ์ž์—ด๋กœ ์ ‘๊ทผ

1. terms -> ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ €์žฅ, today -> [y, m, d] ํ˜•ํƒœ๋กœ ์ €์žฅ

2. privacies ๋ถ„๋ฆฌํ•ด์„œ date = [y, m, d] ํ˜•ํƒœ๋กœ ์ €์žฅ

3. ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ํ•ด๋‹น ์•ฝ๊ด€ ์ฐพ์•„์„œ ๋‚ ์งœ์— ๊ฐœ์›” ์ˆ˜ ๋”ํ•ด์คŒ 

     ใ„ด ํ•ด๋‹น ๊ฐœ์›” ์ˆ˜ // 12 ๋ฅผ y์— ๋”ํ•˜๊ณ 

     ใ„ด ํ•ด๋‹น ๊ฐœ์›”์ˆ˜ % 12 ๋ฅผ m์— ๋”ํ•˜๊ณ 

     ใ„ด ์ด๋•Œ, ๋งŒ์•ฝ m์ด 12๋ณด๋‹ค ํฌ๋ฉด y+1, m-12

4. ๋‚ ์งœ์—์„œ ํ•˜๋ฃจ ๋นผ๊ธฐ

     ใ„ด d=1์ด๋ฉด d=28, m-1

           ใ„ด m=0์ด๋ฉด y-1, m-12

     ใ„ด d!=1์ด๋ฉด d-1

5. ๋‚ ์งœ ๋น„๊ตํ•ด์„œ today๊ฐ€ ๋” ํฌ๋ฉด answer์— ์ถ”๊ฐ€

     ใ„ดyear -> month -> day ์ˆœ์œผ๋กœ ๋น„๊ต

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 150370: ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„ (2023 KAKAO BLIND RECRUITMENT)

def solution(today, terms, privacies):
    answer = []
    todayDate = list(map(int, today.split('.')))
    
    terms_dic = {} 
    for i in terms:
        terms_dic[i.split()[0]] = int(i.split()[1])
    
    n = 1
    for i in privacies:
        date = list(map(int, i.split()[0].split('.')))
        
        date[0] += terms_dic[i.split()[1]] // 12
        date[1] += terms_dic[i.split()[1]] % 12
        if date[1] > 12:
            date[0] += 1
            date[1] -= 12
            
        if date[2] == 1:
            date[2] = 28
            date[1] -= 1
            if date[1] == 0:
                date[0] -= 1
                date[1] = 12
        else:
            date[2] -= 1
                    
        if todayDate[0] > date[0]:
            answer.append(n)
        elif todayDate[0] == date[0]:
            if todayDate[1] > date[1]:
                answer.append(n)
            elif todayDate[1] == date[1]:
                if todayDate[2] > date[2]:
                    answer.append(n)
 
        n += 1
        
    return answer

 

(๋‹ค์‹œ ํ‘ผ ๋ฐฉ๋ฒ•) - ์ˆซ์ž๋กœ ์ ‘๊ทผ

๋ฌธ์ž์—ด๋กœ ๋น„๊ตํ•˜๋А๋ผ ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ๋ณต์žกํ•˜๊ณ  ์ง€์ €๋ถ„ํ•ด์ ธ์„œ ๋‚ ์งœ๋ฅผ ๋ชจ๋‘ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์„œ ๋น„๊ตํ–ˆ๋‹ค

1. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ terms -> ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ €์žฅ, today -> [y, m, d]๋กœ ์ €์žฅ

    ใ„ด terms์—์„œ value๋Š” ๊ฐœ์›”์ˆ˜*28 (๋ฌธ์ œ์—์„œ ํ•œ ๋‹ฌ์€ 28์ผ) 

    ใ„ด today์—์„œ (y*12*28 + m*28 + d)๋ฅผ ์ˆซ์ž๋กœ ์ €์žฅ (12๋‹ฌ, 28์ผ)

2. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ privacies ๋ถ„๋ฆฌํ•ด์„œ date = [y, m, d] ํ˜•ํƒœ๋กœ ์ €์žฅ

    ใ„ด date์—์„œ (y*12*28 + m*28 + d) + ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ํ•ด๋‹น ์•ฝ๊ด€ ์ฐพ์•„์„œ ๋‚ ์งœ ๋”ํ•ด์คŒ - 1(ํ•˜๋ฃจ ๋นผ๊ธฐ)

3. today์™€ date ๋น„๊ตํ•ด์„œ today๊ฐ€ ๋” ํฌ๋ฉด answer์— ์ถ”๊ฐ€

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 150370: ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„ (2023 KAKAO BLIND RECRUITMENT)

def solution(today, terms, privacies):
    answer = []
    
    terms_dic = {}
    for i in terms:
        terms_dic[i.split()[0]] = int(i.split()[1]) * 28
        
    todayDate = list(map(int, today.split('.')))
    td = todayDate[0] * 12 * 28 + todayDate[1] * 28 + todayDate[2]
    
    n = 1
    for i in privacies:
        date = list(map(int, i.split()[0].split('.')))
        d = date[0] * 12 * 28 + date[1] * 28 + date[2] + terms_dic[i.split()[1]] - 1
    
        if td > d:
            answer.append(n)
            
        n += 1
 
    return answer