greenkang
그린 개발log
greenkang
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • 알고리즘 (20)
    • MySQL (0)
    • 생각 (0)
    • 컴퓨터구조 (6)
    • Spring · SpringBoot (1)
    • Java (1)
    • 장애 대응 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 리트코드
  • 백준 24479번 자바
  • 백준7569 java
  • 컴퓨터구조
  • java
  • 백준 17265번
  • 프로그래머스
  • 알고리즘
  • TOPCODER알고리즘트레이닝
  • 41. First Missing Positive
  • 장애 대응 회고
  • 프로그래머스 거리두기 java
  • 백준 1065번 자바
  • 프로그래머스 거리두기 자바
  • 어셈블리어
  • 백준
  • 파이썬
  • 자바
  • 백준7569
  • python

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
greenkang

그린 개발log

알고리즘

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

2022. 6. 7. 22:21

풀이 방법

1. HashMap을 사용하여 아이디별 최종닉네임을 저장할 변수 nickname 선언 (HashMap은 key, value로 이루어진 자료구조)

 

2. record의 모든 값들을 반복하며 들어오는 경우와 닉네임을 변경하는 경우, 각 아이디별 닉네임을 갱신 

 

3. 메세지를 작성할 ArrayList 선언 

 이때, 배열이 아닌 ArrayList를 사용한 이유는 나갈경우에는 메세지를 작성하지 않아 record 의 길이와 메세지가 들어갈 배열의 길이가 같지 않기 때문임

사실 변수를 사용하면 해결 될 문제지만 코드가 길어지고 가독성이 좋지 않을것으로 판단되어 ArrayList사용

 

4. record의 모든 값들을 반복하며 들어오는 경우와 나가는 경우, 닉네임 변수에서 키로 값을 가져와 닉네임 + 메세지를 작성

 

5. ArrayList를 Array로 변환하여 return 

 

코드_Java

import java.util.HashMap;
import java.util.ArrayList;

class Solution {
    public String[] solution(String[] record) {
        
        //최종 닉네임을 nickname에 저장
        HashMap<String, String> nickname = new HashMap<>();
        for(String rcd: record){
            String[] rcdArr = rcd.split(" ");
            if(rcdArr.length > 2) nickname.put(rcdArr[1], rcdArr[2]);
        }
        
        //채팅방 메세지 저장
        ArrayList<String> answer = new ArrayList<>();
        for(String rcd: record){
            String[] rcdArr = rcd.split(" ");
            if("Enter".equals(rcdArr[0])) answer.add(nickname.get(rcdArr[1]) + "님이 들어왔습니다." );
            else if("Leave".equals(rcdArr[0])) answer.add(nickname.get(rcdArr[1]) + "님이 나갔습니다." );
            
        }
        
        return answer.toArray(new String[answer.size()]);
    }
}

 

코드_Python

def solution(record):
    answer = []
    
    #각 id의 최종 nickname 저장
    id_nickname = dict()
    for r in record:
        r_list = r.split(" ")
        if len(r_list) > 2:
            id_nickname[r_list[1]] = r_list[2]
    
    #결과 작성
    for r in record:
        r_list = r.split(" ")
        status, id = r_list[0], r_list[1]
        if status == 'Enter':
            answer.append(id_nickname[id] + '님이 들어왔습니다.')
        elif status == 'Leave':
            answer.append(id_nickname[id] + '님이 나갔습니다.')
        
    return answer

https://programmers.co.kr/learn/courses/30/lessons/42888?language=python3 

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

'알고리즘' 카테고리의 다른 글

[프로그래머스] [1차] 캐시  (0) 2022.06.16
[리트코드] 41. First Missing Positive  (0) 2022.06.12
[프로그래머스] 구명보트  (0) 2022.06.04
[리트코드] 4. Median of Two Sorted Arrays  (0) 2022.06.03
[리트코드] 34. Find First and Last Position of Element in Sorted Array  (0) 2022.05.31
    '알고리즘' 카테고리의 다른 글
    • [프로그래머스] [1차] 캐시
    • [리트코드] 41. First Missing Positive
    • [프로그래머스] 구명보트
    • [리트코드] 4. Median of Two Sorted Arrays
    greenkang
    greenkang

    티스토리툴바