프로그래머스 매일 한 문제 이상 풀기 도전, 남은 방학을 이렇게 보내보려고 한다. 어제에 이어서 진단 문제로 한 문제를 풀었는데 스택 문제가 너무 쉬워서 한 문제 더 풀었다. 오픈채팅방은 2019년 카카오 블라인드 채용의 기출문제로 Lv.2의 쉬운 문제였다. 카카오 글자만 보고 겁나서 안 풀려고 했는데 막상 풀어보니 오래된 문제라 그런지 풀 만했다. 효율 때문에 런타임 에러가 나와 생각보다 푸는 데 조금 걸렸던 문제다.
문제 설명
사용자들이 채팅방에 들어오고 나가는 안내 메시지를 배열로 반환하는 문제다. 채팅방에 들어오고 나가고 이름을 변경하는 메소드와 유저 ID, 닉네임이 공백 문자로 구분되어 하나의 문자열로 주어진다. 주의사항으로는 사용자가 나갈 때는 닉네임이 들어오지 않는다는 것이 있겠다.
문제 해결
split 메소드의 반환 값은 list 형식이다.
첫 번째 인덱스에는 명령의 종류, 두 번째는 유저의 ID, 마지막 name은 있을 수도, 없을 수도 있다.
세 가지 명령에 따라 다른 조건문을 실행한다.
딕셔너리를 {uid: name}의 key-value로 설정해서
사용자가 입장하거나 이름을 바꿀 때 닉네임을 저장하도록 했다.
임시 리스트를 사용해 반환될 메시지를 저장했다.
이름을 바꾸는 것은 반환에 포함되지 않기 때문에 추가하지 않는다.
풀이 코드
def solution(record):
answer = []
tmp = []
dict_name = {}
for i in record:
i = i.split(" ")
if i[0] == "Enter":
dict_name[i[1]] = i[2]
tmp.append([i[1], "님이 들어왔습니다."])
elif i[0] == "Leave":
tmp.append([i[1], "님이 나갔습니다."])
else:
dict_name[i[1]] = i[2]
for i in tmp:
answer.append(dict_name[i[0]]+i[1])
return answer
처음에 무지성으로 loop를 두 번 돌려서 런타임 에러가 났다고 .. ㅎㅎ
다른 사람들의 풀이도 궁금해서 찾아봤는데 코드가 엄청 비슷해서 놀랐다.
9 라인으로 푼 사람도 있던데 대단하다..
오늘은 Lv.2 문제로 두 개 풀었으니까 내일은 Lv.3 문제를 풀 계획이다.
이렇게 매일 풀면 조금씩 나아질 것이라고 믿어야지 어쩌겠나.
해보자 할 수 있다 나도 된다
'알고리즘' 카테고리의 다른 글
[프로그래머스] 미로 탈출 / BFS / Python 코드 (2) | 2024.02.13 |
---|---|
[프로그래머스] 가장 먼 노드 / 그래프, DFS, BFS / Python 코드 (0) | 2024.02.12 |
[프로그래머스] 디스크 컨트롤러 / Heap / Python 코드 (2) | 2024.02.09 |
[BOJ] 9466. 텀 프로젝트 / DFS / Python 풀이 (0) | 2023.06.11 |
[BOJ] 2636. 치즈 / BFS / Python 풀이 (0) | 2023.06.02 |