def solution(record):
li = dict()
answer = []
sen = []
for i, rec in enumerate(record) :
rec = rec.split()
op = rec[0]
id = rec[1]
if op == "Enter" :
name = rec[2]
if id in li.keys() :
if li[id] != name :
idx = [i for i, x in enumerate(sen) if x[0] == id]
for i in idx :
sen[i][1] = name
li[id] = name
sen.append([id, name, 1])
elif op == 'Leave' :
name = li[id]
sen.append([id, name, 2])
else :
name = rec[2]
idx = [i for i, x in enumerate(sen) if x[0] == id]
for i in idx :
sen[i][1] = name
li[id] = name
for s in sen :
str = ''
if s[2] == 1 :
str += (s[1] + '님이 들어왔습니다.')
answer.append(str)
elif s[2] == 2 :
str += (s[1] + '님이 나갔습니다.')
answer.append(str)
return answer
이런 식으로 풀었다가
시간 초과남,, 그래서 아예 엎고 생각 다시 했다
해결하고 나서 코드 다시 보니까 시간 초과 오류날만 하네 ..
저대로면 유저 이름 바꿔줘야 할 때 그 전에 있던 모든 유저 한 번씩 검사해야 되니께 ,,^
def solution(record):
li = dict()
idx = []
answer = []
for i, rec in enumerate(record) :
rec = rec.split()
op = rec[0]
id = rec[1]
if op == "Enter" :
name = rec[2]
li[id] = name
idx.append([1, id])
elif op == 'Leave' :
idx.append([2, id])
else :
name = rec[2]
li[id] = name
for i in idx :
str = ''
if i[0] == 1 :
str += (li[i[1]] + '님이 들어왔습니다.')
answer.append(str)
else :
str += (li[i[1]] + '님이 나갔습니다.')
answer.append(str)
return answer
성공 !!
단순하게 생각하니까 쉬운 문제였던 것이다 ...
record 하나씩 가져와서 공백 기준으로 op, id, name 나누고
id 는 유저마다 다 다른 고유한 값이니까
딕셔너리 사용해서 {id : name} 으로 집어넣어줬다
그리고 여기서 idx 는 출력하는 순서를 담고 있는 인덱스 리스트인데,
Enter 랑 Leave 일 때만 출력하면 되니까 임의로 Enter 를 1, Leave 를 2로 뒀다
예를 들어 Enter 이면 [1, id], Leave 이면 [2, id] 형태로 idx 에 append 해줌 !!
그리고나서 마지막에 idx 하나씩 돌면서
앞이 1이면 'OO님이 들어왔습니다' 출력해주고
앞이 2이면 'OO님이 나갔습니다' 출력해주면 끝 ~~~
'알고리즘' 카테고리의 다른 글
[프로그래머스 Lv2] 기능개발 (Python) (0) | 2022.07.02 |
---|---|
[프로그래머스 Lv2] 카펫 (Python) (0) | 2022.07.02 |
[프로그래머스 Lv1 - 2018 KAKAO BLIND RECRUITMENT] 다트 게임 (Python) (0) | 2022.07.01 |
[프로그래머스 Lv1 - 2018 KAKAO BLIND RECRUITMENT] 비밀지도 (Python) (0) | 2022.07.01 |
[프로그래머스 Lv1 - 2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 (Python) (0) | 2022.06.30 |