https://programmers.co.kr/learn/courses/30/lessons/42888
문자열 파싱을 요구하는 카카오의 코딩테스트 기출문제입니다.
주어진 테스트 케이스
["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234",
"Enter uid1234 Prodo","Change uid4567 Ryan"]
이것을 주고
["Prodo님이 들어왔습니다.", "Ryan님이 들어왔습니다.",
"Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."]
이와 같은 결과를 출력하게 해야 합니다.
아이디어
파이썬에서 기본으로 제공하는 맵 자료구조인 dictionary를 이용해서 해결합니다. 입력으로 들어오는 값 "명령어 아이디 이름"을 공백을 기준으로 나누어서 처리합니다. 그러기 위해선 문자열 파싱이 필요하죠. 문자열 파싱을 위해 .split(" ") 메서드를 사용합니다.
*파이썬 딕셔너리의 개념과 기본사용법을 모르면 이해하기 힘든 문제일 수 있습니다.
def solution(record):
answer = []
trace = []
Map = {}
for i in range(len(record)):
temp = record[i].split(" ")
if temp[0] == "Enter":
Map[temp[1]] = temp[2]
trace.append([ temp[0], temp[1] ])
elif temp[0] == "Leave":
trace.append([ temp[0], temp[1]])
else:
Map[temp[1]] = temp[2]
for i in range(len(trace)):
if trace[i][0] == "Enter":
result = Map[trace[i][1]] + "님이 들어왔습니다."
answer.append(result)
else:
result = Map[trace[i][1]] + "님이 나갔습니다."
answer.append(result)
return answer
개인용 IDE에서 결과를 확인하기 위해선 아래 코드도 밑에 적어주어야 합니다.
record = ["Enter uid1234 Muzi", "Enter uid4567 Prodo",
"Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]
print(solution(record))
*입력값을 "명령어 아이디", "아이디 이름" 으로 나누어서 저장합니다. 2차열 배열을 이용하기 위함이죠.
결과를 출력할 answer 리스트와 오픈채팅방에서 나갔다 들어오는 과정을 저장해줄 trace 리스트 그리고 중간 과정을 매개해줄 Map을 딕셔너리로 선언합니다.
len(record)만큼 반복하니 반복의 횟수는 5입니다. 처음 들어간 입력값이 "Enter uid1234 Muzi"인데 첫번째 원소인 Enter를 보고 딕셔너리에 key uid1234에 값 Muzi를 넣어줍니다. 그리고 trace에 append 메서드로 명령어와 아이디를 리스트 형태로 추가합니다. 명령어가 "Leave"인 경우 떠난다는 표시만 하면 되므로 trace에 명령어와 아이디만 추가해 줍니다. 둘다 아닌경우는 Change 명령어가 들어온 경우로 딕셔너리에 이미 있는 key에 값만 덮어씌어주면 됩니다.
그리고 len(trace)만큼 반복하니 반복횟수는 4가 됩니다. trace에서 저장한 값은 이름을 뺀 "명령어 아이디" 이니까 2차원 배열의 첫번째 요소를 돌려 명령어 "Enter"가 맞는지 확인합니다. 확인 후 trace[i][1]에 맞는 key를 Map에 대입해서 값을 구해냅니다. trace[i][1]에서 i = 0이면 uid1234가 나올겁니다. Map[uid1234]는 최종으론 Prodo가 됩니다. 그리고 그 값을 answer에 append 메서드로 추가합니다.
'[Coding Test] > [프로그래머스]' 카테고리의 다른 글
[프로그래머스] lv3 아이템 줍기 / 파이썬 [해설과 다른 풀이], 고득점kit (0) | 2023.09.08 |
---|---|
[프로그래머스] lv3 단어 변환 / 파이썬, 고득점kit (0) | 2023.09.07 |
[프로그래머스] lv2 게임 맵 최단거리 / 파이썬, 고득점kit (2) | 2023.09.07 |
[프로그래머스] lv3 네트워크 / 파이썬, 고득점kit (0) | 2023.09.03 |
[프로그래머스] lv2 타겟넘버 / 파이썬, 고득점kit (0) | 2023.09.03 |