일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- docker
- Elasticsearch
- Spring
- 알고리즘
- 스프링부트
- 코딩테스트
- 쿠버네티스
- 백엔드
- springboot
- 자바
- 엘라스틱서치
- 스프링
- 리눅스
- 운영체제
- Python
- 파이썬
- Kakao
- 프로그래머스 #카카오 #IT #코딩테스트
- Java
- IT
- Linux
- 개발자
- C
- 네트워크
- 캐시
- 프로그래머스
- 도커
- 카카오
- DPDK
- programmers
- Today
- Total
저고데
[프로그래머스]오픈채팅방 본문
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42888
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
본 문제를 간단히 요약하자면 다음과 같다.
record 배열이 주어지는데, "활동내용, 유저의 ID, 유저의 닉네임" 순서를 가지고 있다.
활동내용이 Leave면 "유저의 닉네임님이 퇴장하였다"라는 내용을 추가하고 Enter면 "유저의 닉네임님이 입장하였다"라는 내용을 추가한다.
그리고 Change라는 활동내용이 있는데, 이는 유저의 닉네임을 변경한다는 내용이며, 최종적으로 모든 닉네임을 변경해야한다.
코드를 작성하기 위한 순서는 다음과 같다.
1. 공백을 기준으로 활동내용과 아이디, 닉네임을 구분한다.
2. 활동내용에 따라서 알맞은 문자열을 추가한다.
3. 딕셔너리를 이용하여 key를 유저의 아이디로 설정하고 value를 유저의 닉네임으로 설정하여, 활동내용이 Change일 때, 키 값에 맞게끔 value값을 바꿔준다.
def solution(record):
answer = []
info={} #유저의 아이디에 대한 닉네임을 설정하기 위해 딕셔너리를 만들어준다.
for i in record:
i=i.split() #1번 : 공백을 기준으로 분리시켜준다.
if i[0]=="Enter": #2번 : Enter일 때, 딕셔너리를 추가해주고 answer에 알맞은 문자열을 append해준다.
info[i[1]]=i[2]
answer.append([i[1], "님이 들어왔습니다."])
elif i[0]=="Leave":
answer.append([i[1], "님이 나갔습니다."])
else: #3번 : Change일 때, 유저의 아이디에 맞게 value값(닉네임)을 새로 대입하여 준다.
info[i[1]]=i[2]
answer = list(map(lambda x : info[x[0]]+x[1], answer)) #3번 : 8, 10번째 줄에서 answer.append([i[1]+"님이 나갔습니다."])가 아닌
#answer.append([i[1], "님이 들어왔습니다."])를 사용한 것을 확인할 수 있다.
#이는 람다함수를 사용하여 최종적으로 바뀐 닉네임을 아이디에 맞게 작성하기 위함이다.
#info[answer[0]]은 최종적으로 바뀐 닉네임이 되고, answer[1]는 "님이 나갔습니다/들어왔습니다."이다.
return answer
본 문제는 Change로 인하여, 엄청 쉽지는 않은 문제였다.
딕셔너리를 사용하여 ID에 따른 닉네임을 설정하고, Change라면 딕셔너리의 value값을 바꾸어주면 되었다.
하지만 이미 answer에 append한 문자열의 닉네임을 바꾸는 것이 이 문제의 포인트였다.
람다함수를 사용하여 기준에 있던 answer문을 다시 바꾸어주면서 최종적으로 문제를 해결할 수 있었다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스]네트워크 (0) | 2023.01.13 |
---|---|
[프로그래머스]타겟 넘버 (0) | 2023.01.13 |
[프로그래머스]프린터 (0) | 2023.01.12 |
[프로그래머스]이중순위큐 (0) | 2023.01.12 |
[프로그래머스]기능개발 (0) | 2023.01.12 |