일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코딩테스트실력진단
- 백준가운데를말해요
- 백준
- 코테
- 백준평범한배낭
- BOJ1655
- 백준스택
- 이것이자바다확인문제
- 백준괄호
- 합성곱연산
- java
- 백준9012
- 백준10828
- 이것이자바다
- 냅색알고리즘
- 백준온라인저지
- 카카오코테
- 딥러닝
- BOJ
- 스파르타코딩클럽
- 컴퓨터비전
- 가운데를말해요
- 이것이자바다9장
- 윤곽선검출
- 확인문제
- KT포트포워딩
- 운영체제
- 코드트리
- 웹개발기초
- 2019카카오코테
- Today
- Total
코딩하는 락커
[2019 KAKAO BLIND RECRUITMENT] 오픈채팅방(42888) 본문
def solution(record):
answer = []
users = {}
enter_list = []
for r in record :
if r.split(' ')[0] == "Enter" :
users[r.split(' ')[1]] = r.split(' ')[2]
enter_list.append([r.split(' ')[1], r.split(' ')[0]])
elif r.split(' ')[0] == "Leave" :
enter_list.append([r.split(' ')[1], r.split(' ')[0]])
else :
users[r.split(' ')[1]] = r.split(' ')[2]
for i in enter_list :
if i[1] == "Enter" :
answer.append("{0}님이 들어왔습니다.".format(users[i[0]]))
else :
answer.append("{0}님이 나갔습니다.".format(users[i[0]]))
return answer
def main() :
record = ["Enter uid1234 Muzi",
"Enter uid4567 Prodo",
"Leave uid1234",
"Enter uid1234 Prodo",
"Change uid4567 Ryan"]
print(solution(record))
if __name__ == "__main__" :
main()
* 고려해야 하는 것은?
1. 순서 : 입장하거나 퇴장한 순서대로 메시지를 출력해야 하기 때문
2. 유저 아이디 : 닉네임 변경시 사용자를 구분하는 구분자이기 때문
3. 닉네임 : 출력시 사용해야 하기 때문
4. Enter / Leave : 출력시 사용해야 하기 때문
* 변수 설명 :
- answer : 최종적으로 출력할 문자열들을 저장하는 배열. [" ~ ", " ~ ", ...] 형태.
- users : 유저 아이디를 키로 하여 닉네임을 저장하는 딕셔너리. [{유저 아이디 : 닉네임}, {유저 아이디 : 닉네임}, ... ] 형태.
- enter_list : 유저들이 순서대로 Enter/Leave를 한 기록을 저장하는 배열. [[유저 아이디, Enter/Leave], [유저 아이디, Enter/Leave], ...] 형태
* 로직 설명
- record를 공백을 기준으로 나누었을 때 첫번째 문자열이 Enter(r.split(' ')[0])이면 user 딕셔너리에 유저 아이디(r.split(' ')[1])를 key로 하여 닉네임(r.split(' ')[2])을 저장, enter_list 배열에 유저 아이디(r.split(' ')[1])와 Enter/Leaver.split(' ')[0]]) 저장
- record를 공백을 기준으로 나누었을 때 첫번째 문자열이 Leave(r.split(' ')[0])이면 enter_list 배열에 유저 아이디(r.split(' ')[1])와 Enter/Leaver.split(' ')[0]]) 저장
- 그 외에는 Change 이기 때문에 user 딕셔너리에 유저 아이디(r.split(' ')[1])를 key로 하여 닉네임(r.split(' ')[2])을 저장하여 변경
- 그 다음에는 enter_list의 원소를 하나씩 돌면서(i) 원소의 1번째 원소(i[1])가 Enter이면 user딕셔너리를 유저 아이디로 접근users[i[0]]하여 닉네임+님이 들어왔습니다를 answer에 append.
- Enter가 아닐 경우 user딕셔너리를 유저 아이디로 접근users[i[0]]하여 닉네임+님이 나갔습니다를 answer에 append.
- answer 반환
* 한줄평
나이브하게 풀어서 쉽게 풀었당~^^;
요정~도까지는 할만함a
'💯 코딩테스트 > [2021~] 💯 코딩테스트' 카테고리의 다른 글
[BOJ 11401] 이항 계수 3 - Python 풀이 (0) | 2022.02.07 |
---|---|
[BOJ 1655] 가운데를 말해요 - JAVA 풀이 (0) | 2022.01.09 |
[BOJ 12865] 평범한 배낭 - JAVA 풀이 (0) | 2022.01.09 |
[BOJ 9012] 괄호 - JAVA 풀이 (0) | 2022.01.03 |
[BOJ 10828] 스택 - JAVA 풀이 (0) | 2022.01.03 |