-
프로그래머스 Lv.2) 오픈채팅방알고리즘/프로그래머스 카카오 2020. 5. 22. 23:05반응형
2019 KAKAO BLIND RECRUITMENT
풀이
오늘 푼 문제 중에 가장 간단한 문제였다. 크게 주의해야할 부분 없이 입장, 퇴장 명령어를 저장시키는 LinkedList와, 유저 id에 따라 이름을 저장할 HashMap 두 자료구조를 이용해 풀었다.
명령어에 따라 변경인 경우 닉네임을 변경해주었고, 입장이나 퇴장 명령어는 명령어 List에 저장했다.
이후 명령어 리스트 만큼 정답 배열을 만들고, 리스트를 돌면서 미리 저장해둔 멘트와 유저 아이디를 StringBuffer를 통해 붙이고 배열에 저장해줬다.
로직
1. 기록을 돌면서 명령어를 구분한다.
1-1. 변경의 경우 유저 아이디에 저장된 닉네임을 변경한다.
1-2. 입장이나 퇴장의 명령어는 명령어 리스트에 저장한다.
2. 명령어 리스트 만큼 정답 배열을 만들고, 리스트를 돌면서 유저 아이디에 명령어에 따른 멘트를 붙여서 배열에 저장한다.
코드
import java.util.HashMap; import java.util.LinkedList; class Solution { final String ENTERMENT = "님이 들어왔습니다."; final String LEAVEMENT = "님이 나갔습니다."; final String ENTER = "Enter" , CHANGE = "Change"; public String[] solution(String[] record) { HashMap<String, String> userMap = new HashMap<>(); LinkedList<String[]> cmdList = new LinkedList<>(); for(String str : record) { String[] strArr = str.split(" "); //0 : CMD, 1 : User ID, 2 : NickName if(strArr[0].equals(CHANGE)) { // 닉네임 변경 userMap.replace(strArr[1], strArr[2]); // 닉네임 변경 } else { if(strArr[0].equals(ENTER)) { // 대화방 입장 if(userMap.containsKey(strArr[1])) { // 등록된 유저면 userMap.replace(strArr[1],strArr[2]); // 닉네임 변경 } else { userMap.put(strArr[1],strArr[2]); // 정보 추가 } } cmdList.offer(new String[] {strArr[0], strArr[1]}); // 명령 추가 } } String[] answer = new String[cmdList.size()]; for(int i=0; i<answer.length; i++) { String[] cmdArr = cmdList.poll(); StringBuffer sb = new StringBuffer(userMap.get(cmdArr[1])); if(cmdArr[0].equals(ENTER)) { // 입장 sb.append(ENTERMENT); } else { // 퇴장 sb.append(LEAVEMENT); } answer[i] = sb.toString(); } return answer; } }
반응형'알고리즘 > 프로그래머스 카카오' 카테고리의 다른 글
프로그래머스 Lv.2) 방금그곡 (0) 2020.05.25 프로그래머스 Lv.2) 후보키 (2) 2020.05.22 프로그래머스 Lv.2) 캐시 (0) 2020.05.22 프로그래머스 Lv.2) 프렌즈4블록 (0) 2020.05.22 프로그래머스 Lv.2) [1차] 뉴스 클러링 (0) 2020.05.22