본문 바로가기

프로그래머스 코딩테스트 연습 Lv1

Lv2 - 오픈채팅방

[문제설명]

- 들어오고 나갈때 "[닉네임]님이 들어왔습니다." / "[닉네임]님이 나갔습니다." 라고 출력된다.

- 닉변하려면 채팅방 나간후 새로운 닉네임으로 다시 들어가거나 채팅방에서 닉네임을 변경하는 방법 두개가 있다.

- 닉변하면 기존 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경됨.

- 중복닉네임 허용됨.

- 채팅방에 오고가거나 닉네임을 변경한 기록이 담긴 record가 매개변수로 주어질 때, 최종적으로 방을 개설한 사람이 보게되는 메세지를 문자열 배열형태로 리턴.

- 모든 유저는 id로 구분. "Enter [id] [name]" "Leave [id] [name]" "Change [id] [name]" 세가지 경우의 수 있다.

- 각 단어는 공백으로 구분되어 있으며, 알파벳 대문자, 소문자, 숫자로만 이루어져 있다.

- id 랑 name은 대소문자 구분함.

- Id 랑 name 길이는 1~10

 

[내 풀이]

- 시작 단어 Enter, Leave, Change

처음에 문자열을 공백으로 나눠서 자르는걸 테스트 했습니다.

- change 들을 일단 먼저 모아서 User_id별로 구분한다음에 가장 마지막 Change 기록들로 전부 맞춰놓으려 했는데.. 바꾼뒤에 나갔다가 또 바꾸고 들어오는 경우가 문제가 생김.

- Leave는 신경쓰지 말고 Enter이랑 Change일때 User_id를 검색 한다음에 tmp_name을 바꾸도록 하는거로.

실패 한 결과.

다 했다고 생각했는데 역시 O(n^2) 은 통과 못하네요 ㅎㅎ.. 샤워하면서 다시 생각해보겠습니다.

 

Dict로 만들어서 id랑 name 넣으면 좀 더 쉽게 풀 수 있는 방법이 있었네요.. 이거저거 시도하면서 반쪽짜리 성공한뒤 구글링해서 찾았습니다. 

기본 개념은 그대로지만 사전으로 바꿔서 했다는점! 꼭 기억.