일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 데이터과학
- AI Mathematics
- IBM
- 티스토리챌린지
- 클린코드 파이썬
- 자바
- 코세라
- 데이터 사이언스
- 깨끗한 코드
- 데이터사이언스
- Clean Code
- programmers
- Java
- 알고리즘
- 프로그래머스
- 코테
- softeer
- string
- 파이썬
- 부스트캠프
- 코딩테스트
- Coursera
- 클린코드
- 오블완
- Boostcamp AI
- Data Science
- Python
- 문자열
- data science methodology
- 소프티어
- Today
- Total
떼닝로그
[프로그래머스] 오픈채팅방 (Python 파이썬) 본문
2019 KAKAO BLIND RECRUITMENT Level 2 오픈채팅방
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
💡 아이디어
💡 문제를 어떤 방식으로 해결하려 했는지 그 과정을 적어주세요. 초기에 접근한 방법과 최종 접근이 차이가 없으면 한개만 적어도 됩니다.
초기 접근
생각보다 오래걸렸다. 다 하고 나니 뭐 이런 걸로 시간을 오래 끈 거야 싶은... 그냥 무지성 코딩의 절정을 찍은 것 같다.
그냥 문제 읽으면서 코드를 적었더니...
그리고 시간복잡도 생각 안 하고 그냥 문자열을 일일이 다 split하고 문자열 안에서 또 문자열을 찾고... 2중으로 for문 돌리고 했더니 시간 초과가 나버렸다.
최종 접근
그래서 최종적으로는 문자열 비교를 최소한으로 하려고 했다. 그래봐야 또 split하고 비교하는 건 마찬가지지만...
자잘하게 설명할 건 없고... 큼직하게 말해보자면...
아이디와 닉네임 사이의 관계를 나타내고 있는 딕셔너리가 있다.
방에 입장하면 딕셔너리에 추가되고, 이름을 바꾸면 딕셔너리 내에서 아이디에 따라 이름이 바뀌게 된다.
그리고 그냥 마지막에 다시 한 번 돌면서 들어오고, 나가고에 대한 텍스트를 처리해주면 된다.
여기서 닉네임은 역시나 그 딕셔너리에서 가져오는.
이렇게 쉬운 문젠데 왜 이렇게 헤매고 오래 걸렸는지 모르겠다... 실제 시험이었으면 시간 부족해서 못했을듯...
그러고 후회 잔뜩 했겠지...
📋 사용 스펙
💡 어떤 알고리즘 또는 기법을 사용해 문제를 해결했는지 알려주세요
Python의 dict 자료형
👨🏻💻 👩💻 코드
def solution(record):
answer = []
# 아이디와 닉네임 매치시키기 위한 딕셔너리
id_nick = {}
# 들어감과 나감만 기록하기 위한 리스트
order_list = []
# 레코드 돌면서
for rec_ in record:
rec = rec_.split()
# 입장일 경우 딕셔너리에 아이디와 닉네임 저장 후
# 오더리스트에 Enter했음을 나타내는 1과 아이디 저장
if rec[0] == "Enter":
id_nick[rec[1]] = rec[2]
order_list.append([1, rec[1]])
# 닉네임 변경일 경우 딕셔너리에서 아이디 찾아서 닉네임만 변경
elif rec[0] == "Change":
id_nick[rec[1]] = rec[2]
# 퇴장일 경우 오더리스트에 Leave했음을 나타내는 0과 아이디 저장
else:
order_list.append([0, rec[1]])
# 오더리스트 돌면서 enter, leave 구별
# 닉네임은 id_nick의 최종 결과에서 아이디를 기준으로 검색해서 가져옴
for order in order_list:
ans_str = f"{id_nick[order[1]]}님이 "
if order[0] == 1:
ans_str += "들어왔습니다."
else:
ans_str += "나갔습니다."
answer.append(ans_str)
return answer
'Algorithms > 프로그래머스' 카테고리의 다른 글
[Python] 프로그래머스 Lv4. 서울에 위치한 식당 목록 출력하기 (SQL WHERE/HAVING) (2) | 2024.08.13 |
---|---|
[프로그래머스] 메뉴 리뉴얼 (Python 파이썬) (1) | 2022.07.01 |
[프로그래머스] 124 나라의 숫자 (Python 파이썬) (0) | 2022.06.30 |
[프로그래머스] 키패드 누르기 (Python 파이썬) (0) | 2022.06.30 |
[프로그래머스] 문자열 압축 (Python 파이썬) (0) | 2022.06.29 |