- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42888
문제 이해
1. 처음 방에 들어오는거면 처음에 입력한 이름을 사용하고,
2. 이미 방에 들어온 적이 있는데 닉네임을 변경한 경우는 아이디를 식별해서 이미 입력한 문장을 변경한 이름으로 변경한다
3. 나가는 거는 그냥 나가는 것이고
4. 이름을 변경하는 경우는 같은 아이디의 닉네임은 다 변경해야 한다
처음에는 아이디는 변하지 않으므로 아이디를 키, 닉네임을 밸류로 하는 딕셔너리를 만들어서 진행해야하나 싶었다
이렇게 했을때 막혔던 부분이 그럼 enter, leave, change는 어떻게 하지? 였다
그것 때문에 어떻게 할지 몰라서 다른 풀이를 봤는데, 위의 문제는 반복문을 한번 더 실행하면 되는 것이었다
leave는 아이디를 식별할 필요가 없으므로 단어 갯수가 2개 나머지는 3개이므로 단어가 3개인 경우로 딕셔너리를 만든다
이 경우 같은 아이디가 닉네임을 변경한 경우는 마지막에는 가장 최신 값으로 저장될 것이므로 문제의도에 적절하다
change는 따로 알림이 가지 않으므로 이는 출력할 필요가 없고, enter인지 leave인지에 따라 나눠서 출력하면 정답이다
놓친 것들
이름 변경할 때는 문장을 출력하지 않는다
enter / change는 단어가 3개이지만, leave는 2개이다
- 정답 풀이 :
def solution(record):
answer = []
dic = {}
for sentence in record:
sentence_split = sentence.split()
#Leave의 단어는 2개이기 때문에 이걸 구별하는 분기문
if len(sentence_split) == 3:
dic[sentence_split[1]] = sentence_split[2]
for sentence in record:
sentence_split = sentence.split()
#change는 따로 문장을 출력하지 않는다
if sentence_split[0] == 'Enter':
answer.append('{}님이 들어왔습니다.'.format(dic[sentence_split[1]]))
elif sentence_split[0] == 'Leave':
answer.append('{}님이 나갔습니다.'.format(dic[sentence_split[1]]))
return answer
'코딩테스트 > 기출' 카테고리의 다른 글
[2020 KAKAO BLIND RECRUITMENT / 프로그래머스] 60057번 : 문자열 압축 (1) | 2022.09.07 |
---|---|
[Summer Winter Coding(2019) / 프로그래머스] 멀쩡한 사각형 (0) | 2022.09.06 |
[2022 kakao tech intership / 프로그래머스] 118667번 : 두 큐 합 같게 만들기 (0) | 2022.09.06 |
[2018 KAKAO BLIND RECRUITMENT / 프로그래머스] 17682번 : [1차] 다트 게임 (0) | 2022.08.31 |
[연습문제 / 프로그래머스] 12940번 : 최대공약수와 최소공배수 (0) | 2022.08.31 |