[프로그래머스 lv 2] 오픈채팅방

2025. 2. 25. 14:20·✨ 공부 기록/알고리즘 & 코딩테스트

아이디어 : Change가 나오는 경우에만 닉네임이 바뀌기 때문에 Change가 나오면 해당 아이디의 닉네임을 최종적인 Change 값으로 바꾸고 Enter와 Leave 부분을 print 한다. => 나갔다가 들어오는 경우에도 닉네임이 바뀌기 때문에 그 부분을 고려하여야 한다! 나가는 건 신경쓰지 말고 들어오는 부분(Enter)을 신경쓰면 된다.

 

그리고 Leave의 경우 이름이 포함되어 있지 않기 때문에 아이디-이름을 관리하는 리스트(튜플)이 따로 필요하다.

 

# 첫 번째 시도 (시간 초과 경우 발생)

def solution(record):
    id_name_list = []
    splited_list = []
    for data in record:
        splited = data.split()
        splited_list.append(splited)
        if splited[0]=="Enter" or splited[0]=="Change":
            id_name_list.append([splited[1],splited[2]])
    
    for id_name in id_name_list:
        for splited in splited_list:
            if id_name[0]==splited[1] and splited[0]!="Leave":
                splited[2]=id_name[1]
    
    # final print
    answer = []
    for splited in splited_list:
        if splited[0]=="Enter":
            answer.append(splited[2]+"님이 들어왔습니다.")
        elif splited[0]=="Leave":
            for id_name in id_name_list:
                if id_name[0]==splited[1]:
                    name = id_name[1]
            answer.append(name+"님이 나갔습니다.") 
    
    return answer

 

 

# 두 번째 시도

 

중복되는 항목들을 없애기 위해서 dictionary로 저장하는게 더 나을 것 같다는 생각이 들었다.

 

def solution(record):
    # id_name 수정 dict 만들기
    id_name_dict = {}
    splited_list = []
    for data in record:
        splited = data.split()
        splited_list.append(splited)
        if splited[0]=="Enter" or splited[0]=="Change":
            id_name_dict[splited[1]] = splited[2]
    
    # 수정 dict 반영하고 바로 answer에 담기
    answer = []
    for splited in splited_list:
        if splited[0]=="Enter":
            name = id_name_dict[splited[1]]
            answer.append(name+"님이 들어왔습니다.")
        elif splited[0]=="Leave":
            name = id_name_dict[splited[1]]
            answer.append(name+"님이 나갔습니다.") 
    return answer
저작자표시 비영리 변경금지 (새창열림)

'✨ 공부 기록 > 알고리즘 & 코딩테스트' 카테고리의 다른 글

[프로그래머스 lv 2] 타겟 넘버(깊이/너비 우선 탐색(DFS/BFS))  (0) 2025.02.26
[프로그래머스 lv 1] 같은 숫자는 싫어(코딩테스트 고득점 Kit/스택/큐) 2️⃣  (0) 2025.02.25
[프로그래머스 lv 0] 컨트롤 제트  (0) 2025.02.25
[프로그래머스 lv 1] 과일 장수  (0) 2025.02.25
[자료구조] chapter 5. Linked Structures : stack(C++ 구현)  (0) 2022.10.14
'✨ 공부 기록/알고리즘 & 코딩테스트' 카테고리의 다른 글
  • [프로그래머스 lv 1] 같은 숫자는 싫어(코딩테스트 고득점 Kit/스택/큐) 2️⃣
  • [프로그래머스 lv 0] 컨트롤 제트
  • [프로그래머스 lv 1] 과일 장수
  • [자료구조] chapter 5. Linked Structures : stack(C++ 구현)
LaonMoon
LaonMoon
  • LaonMoon
    스토리생성연구블로그
    LaonMoon
  • 전체
    오늘
    어제
  • 공지사항

    • About me👋
    • 분류 전체보기
      • ✨ Story Generation
        • 논문 리뷰
        • 연구 관련 생각
      • ✨ 자연어 처리
        • (짧은) 논문 리뷰
        • HuggingFace
        • Transformer 구현
      • ✨ 공부 기록
        • 알고리즘 & 코딩테스트
        • 딥러닝
        • 웹 개발
        • Flutter
        • Flask
        • Android
        • NLP
        • Docker&k8s
        • Database
        • [24-1] 데이터 분석
        • [24-1] RL
      • ✨ 포트폴리오
        • 2020
        • 2021
        • 2022
        • 2023
        • 2024
        • 2025
      • 프로그래밍
        • 오류(Error)정리
        • 시행착오
        • 리눅스 명령어
        • 공부내용 정리
      • AI Playground
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LaonMoon
[프로그래머스 lv 2] 오픈채팅방
상단으로

티스토리툴바