본문 바로가기
프로그래머스/Python

[프로그래머스] 오픈채팅방 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 8. 13.
728x90
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 계속 바뀌는 이름 대신 바뀌지 않는 유저 이름을 기준으로 하여 정답을 구한 뒤, 마지막에 최종적으로 바뀌는 이름을 유저 아이디와 바꿔 문자열을 구하면 된다.

 

  1. 채팅방에서 유저들의 정보를 저장할 딕셔너리를 생성한다. d = {}
  2. 입력받은 기록 리스트에서 문자열을 하나씩 추출한다. for i in record
  3. 명령어는 문자열의 제일 앞 단어이고 op = i.split()[0]
  4. 유저의 아이디는 문자열의 두번째 단어이다. uid = i.split()[1]
  5. 만약 명령어가 Enter이면 if (op == "Enter")
  6. 바뀌지 않는 유저 아이디를 key로 하고 이름을 value로 저장한다. d[uid] = i.split()[2]
  7. 그리고 정답 리스트에 유저 아이디와 문구를 리스트로 묶어 저장한다. answer.append([uid, "님이 들어왔습니다."])
  8. 만약 명령어가 Leave이면 elif (op == "Leave")
  9. 정답 리스트에 유저 아이디와 문구를 리스트로 묶어 저장한다. answer.append([uid, "님이 나갔습니다."])
  10. 만약 명령어가 둘 다 아니라면 (Change) else
  11. 유저 아이디에 저장되어 있는 이름을 바꾼다. d[uid] = i.split()[2]
  12. 정답 리스트를 모두 작성했다면 하나씩 추출하여 for i in range(len(answer))
  13. 유저 아이디로 되어있던 부분을 최종 이름으로 변경한다. answer[i][0] = d[answer[i][0]]
  14. 해당 리스트를 하나의 문자열로 합쳐준다. answer[i] = ''.join(answer[i])
반응형

3. 소스코드

def solution(record):
    answer = []
    
    d = {}
    for i in record:
        op = i.split()[0]
        uid = i.split()[1]
        
        if (op == "Enter"):
            d[uid] = i.split()[2]
            answer.append([uid, "님이 들어왔습니다."])
        elif (op == "Leave"):
            answer.append([uid, "님이 나갔습니다."])
        else:
            d[uid] = i.split()[2]
    
    for i in range(len(answer)):
        answer[i][0] = d[answer[i][0]]
        answer[i] = ''.join(answer[i])

    return answer
728x90
반응형