[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ (Python)

2021. 8. 13. 22:46ใ†๐Ÿ’ป ๊ฐœ๋ฐœ/Algorithm

โญLevel 2  


https://programmers.co.kr/learn/courses/30/lessons/42888

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ

์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ์นด์นด์˜คํ†ก ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ์—์„œ๋Š” ์นœ๊ตฌ๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ๋“ค๊ณผ ๋Œ€ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณธ๋ž˜ ๋‹‰๋„ค์ž„์ด ์•„๋‹Œ ๊ฐ€์ƒ์˜ ๋‹‰๋„ค์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„ํŒ…๋ฐฉ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์‹ ์ž…์‚ฌ์›์ธ ๊น€ํฌ๋ฃจ๋Š” ์นด์นด์˜คํ†ก ์˜ค

programmers.co.kr

 

์ฝ”๋“œ (Python)

def solution(record):
    answer = []
    dic = {}
    for i in record:
        temp = i.split()
        if temp[0] == "Enter" or temp[0] == "Change":
            dic[temp[1]] = temp[2]
        else:  # Leave
            continue
    for i in record:
        temp = i.split()
        if temp[0] == "Enter":
            answer.append(dic[temp[1]] + "๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.")
        if temp[0] == "Leave":
            answer.append(dic[temp[1]] + "๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.")
        else:  # Change
            continue
    return answer

 

ํ’€์ด ๊ณผ์ • 

id๋Š” ๊ณ ์œ ๊ฐ’์ด๋ฉฐ, id์— ํ•ด๋‹นํ•˜๋Š” ๋‹‰๋„ค์ž„์€ ๊ฐ€๋ณ€์ ์ด๋‹ค. ๋‹‰๋„ค์ž„์ด ๋ฐ”๋€Œ๋Š”๊ฑด Enter์™€ Change ์ด ๋‘๊ฒฝ์šฐ์ด๊ณ , Leave๋Š” ๋– ๋‚ฌ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋งŒ ๋‚จ๊ธด๋‹ค.

๋”ฐ๋ผ์„œ ๋”•์…”๋„ˆ๋ฆฌ {id: ๋‹‰๋„ค์ž„} ์„ ๋งŒ๋“ค๊ณ , record ์ž…๋ ฅ์ค‘ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋Š” Enterํ˜น์€ Change ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค.

์ด๋•Œ, key๊ฐ€ ์ค‘๋ณต์ธ๊ฒฝ์šฐ (๋™์ผํ•œ id๋ฅผ ๊ฐ€์ง„๊ฒฝ์šฐ) ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜ค๋Š” value๊ฐ’์œผ๋กœ ์ตœ์ข… ์—…๋ฐ์ดํŠธ ๋œ๋‹ค. (๋”•์…”๋„ˆ๋ฆฌ ํŠน์„ฑ์ƒ, key๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ ๊ฐ’๋งŒ ๋“ค์–ด๊ฐ„๋‹ค.)

 

[์ž…๋ ฅ]

record = ["Enter uid1234 Muzi", 

               "Enter uid4567 Prodo",

               "Leave uid1234",

               "Enter uid1234 Prodo",

               "Change uid4567 Ryan"]

[์ถœ๋ ฅ]

answer = ["Prodo๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.", 

                 "Ryan๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.",

                 "Prodo๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.",

                 "Prodo๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค."]

 

uid1234๋Š” ์ฒ˜์Œ์— Muzi๋กœ ์ž…์žฅํ–ˆ๋‹ค๊ฐ€, ์ฑ„ํŒ…๋ฐฉ์„ ๋‚˜๊ฐ€๊ณ  Prodo๋กœ ๋‹‰๋„ค์ž„์„ ๋ฐ”๊ฟ”์„œ ๋“ค์–ด์™”๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ์ข… ๋‹‰๋„ค์ž„์€ Prodo์ด๊ณ , ๊ด€๋ฆฌ์ž ํ™”๋ฉด์—์„œ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ„ ๋‹‰๋„ค์ž„์€ Prodo๋กœ ๊ธฐ๋ก๋˜์–ด์•ผํ•œ๋‹ค. 

uid4567์€ Prodo๋กœ ์ž…์žฅํ•ด์„œ ๋‹‰๋„ค์ž„์„ Ryan์œผ๋กœ ๋ฐ”๊ฟจ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์ข… ๋‹‰๋„ค์ž„์€ Ryan์ด๊ณ , ๊ด€๋ฆฌ์ž ํ™”๋ฉด์— Ryan์œผ๋กœ ๊ธฐ๋ก๋œ๋‹ค. 

 

1. ๋”•์…”๋„ˆ๋ฆฌ ๋งŒ๋“ค๊ธฐ 

dic = {}
for i in record:
    temp = i.split()
    if temp[0] == "Enter" or temp[0] == "Change":
        dic[temp[1]] = temp[2]
    else:  # Leave
        continue

3: ์ž…๋ ฅ๋ฐ›์€ record๋ฅผ ๋ช…๋ น์–ด/id/๋‹‰๋„ค์ž„ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ temp๋ณ€์ˆ˜์— ์ €์žฅํ•ด๋‘์—ˆ๋‹ค. 

 

4~5: ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. "Enter"์™€ "Change"๋ฅผ ํ†ตํ•ด id๋งˆ๋‹ค ๋‹‰๋„ค์ž„์ด ์ •ํ•ด์ง„๋‹ค. ๋ชจ๋“  record๋ฅผ ๋Œ๋ฉด์„œ ๋ฐ˜๋ณต๋˜๊ณ , ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ value๊ฐ€ ์ตœ์ข… ๋‹‰๋„ค์ž„์ด๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ๋Š” d = {1 : 'a', 2 : 'b'} ์—์„œ d[1]๋Š” 'a'๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค. 

 

6~7: "Leave"๋ฅผ ๋งŒ๋‚˜๋„ ๋‹‰๋„ค์ž„์ด ๋ฐ”๋€Œ๋Š”๊ฑด ์•„๋‹ˆ๋ผ์„œ ๋ฌด์‹œ.

 

์˜ˆ์ œ ์ž…๋ ฅ์— ๋”ฐ๋ฅด๋ฉด, {'uid1234': 'Prodo', 'uid4567': 'Ryan'} ์ด๋ผ๋Š” ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ์™„์„ฑ๋  ๊ฒƒ์ด๋‹ค. ์ด์ œ ์ด ๋”•์…”๋„ˆ๋ฆฌ์— ์ ‘๊ทผํ•ด์„œ value๋งŒ ๋ฝ‘์•„๋‚ด๋ฉด ๋œ๋‹ค. 

 

2. ์ถœ๋ ฅ 

for i in record:
    temp = i.split()
    if temp[0] == "Enter":
        answer.append(dic[temp[1]] + "๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.")
    if temp[0] == "Leave":
        answer.append(dic[temp[1]] + "๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.")
    else:  # Change
        continue

3~4: ๋”•์…”๋„ˆ๋ฆฌ์— ์ ‘๊ทผํ•ด์„œ temp[1] ์ฆ‰, id์— ํ•ด๋‹นํ•˜๋Š” value๊ฐ’์„ ๊ฐ€์ ธ์™€ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ answer ๋ฐฐ์—ด์— ์ €์žฅ์‹œํ‚จ๋‹ค. 

 

5~6: "Leave"๋„ "Enter"์™€ ๋˜‘๊ฐ™์ด ์ง„ํ–‰

 

7~8: "Change"๋Š” ๋”ฐ๋กœ ์ถœ๋ ฅ ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฌด์‹œํ•œ๋‹ค.