일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- zustand
- 클라이언트 상태 관리 라이브러리
- JavaScript
- 좋은 PR
- useLayoutEffect
- Sparkplug
- 암묵적 타입 변환
- Compound Component
- Redux Toolkit
- Recoil
- jotai
- linux 배포판
- Headless 컴포넌트
- 명시적 타입 변환
- 프로세스
- 주니어개발자
- CS
- prettier-plugin-tailwindcss
- react
- type assertion
- Render Queue
- task queue
- useCallback
- AJIT
- Custom Hook
- docker
- 타입 단언
- Microtask Queue
- helm-chart
- TypeScript
Archives
- Today
- Total
구리
[Algorithm] 프로그래머스 - 오픈채팅방 (Java) 본문
[문제]
https://programmers.co.kr/learn/courses/30/lessons/42888
[풀이]
문제를 봤을 때 일단 2가지가 필요하다고 생각했다.
- id는 고정적이나 닉네임은 변경 가능성이 있기에 key값 중복허용이 불가한 Map을 이용하여 id,닉네임 저장하기
- 채팅방 입장/퇴장 기록을 저장하는데 몇명이 얼마나 들어왔다 나갈지 모르지 길이가 고정적인 배열이 아닌 List 생성 (입장,퇴장 & id 저장)
그리고 닉네임이 변경될 수 있는 경우는 유저가 새로운 닉네임 변경 후 재입장할 경우, 채팅방 내에서 변경할 경우이므로 Enter, Change 로 시작되는 문자열일때 무조건 map에 id,닉네임을 저장한다.
1. 모든 기록이 담긴 record를 for문으로 돌기
- 꺼낸 문자열 str을 공백(" ")으로 쪼개서(split) 입장/퇴장을 표시하는 act, 유저 아이디를 뜻하는 id, 유저 닉네임를 가르키는 name 선언
- 만약 입장일 경우 List에 채팅방 입장/퇴장, id를 저장, map에 id, name 저장
- 퇴장일 경우 List에 채팅장 입장/퇴장, id 저장
- 닉네임 변경일경우 Map에만 id, name 저장
2. record for문이 끝났다면 List를 for문으로 돌면서 Map.get(id)로 value값인 닉네임과 입장/퇴장에 따른 기록 출력
[코드]
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
// id, 닉네임을 저장하는 변수
Map<String, String> map = new HashMap<>();
// id, 입장/퇴장 기록하는 변수 (String[0] = id, String[1] = 입장/퇴장
List<String[]> list = new ArrayList<>();
for(String str : record){
String act = str.split(" ")[0]; // 입장/퇴장
String id = str.split(" ")[1]; // 사용자 id
if(act.equals("Enter")){ // 채팅방 입장할 경우
String name = str.split(" ")[2]; // 닉네임 추출
map.put(id, name);
list.add(new String[]{id,"님이 들어왔습니다."});
}else if(act.equals("Change")){ // 닉네임 변경일경우
String name = str.split(" ")[2];
map.put(id, name);
}else{ // 채팅방 퇴장하는 경우
list.add(new String[]{id,"님이 나갔습니다."});
}
}
answer = new String[list.size()];
for(int i=0;i<list.size();i++){
answer[i] = map.get(list.get(i)[0]) + list.get(i)[1];
}
return answer;
}
}
'혼자 공부,정리하는 알고리즘' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 문자열 압축 (Java) (0) | 2021.10.26 |
---|---|
[Algorithm] 프로그래머스 - 타겟 넘버 (0) | 2021.10.20 |
[Algorithm] 프로그래머스 - 다음 큰 숫자 (Java) (0) | 2021.10.14 |
[Algorithm] 프로그래머스 이상한 문자 만들기 (Java) (0) | 2021.10.12 |
[Algorithm] 최대공약수, 최소공배수 (0) | 2021.10.04 |