[프로그래머스/Level2] 오픈채팅방 (JAVA)
📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
• HashMap 사용 - <id, 닉네임> 저장
아래 2단계를 거쳐 진행했다.
1. record 배열을 돌며 아래과 같이 처리한다.
- Enter인 경우 | 이미 맵에 존재하는 id라면 해당 id를 새로 입력받은 id로 교체한다. 존재하지 않는 id라면 해당 id와 닉네임을 map에 저장한다. 그리고 출력할 정답 배열의 길이(cnt)를 +1한다.
- Leave인 경우 | 출력할 정답 배열의 길이(cnt)만 1 증가시킨다.
- Change인 경우 | Map에 이미 존재하는 id의 닉네임을 새로 입력 받은 닉네임으로 바꾼다.
2. cnt 크기의 String형 정답 배열을 만들고 또 다시 record 배열을 돌며 아래와 같이 진행한다.
- Enter인 경우, map에서 현재에 해당하는 id가 들어왔다고 출력한다.
- Leave인 경우, map에서 현재에 해당하는 id가 나갔다고 출력한다.
💥 유의사항
2단계에서 정답 배열에 원소를 저장할 때, idx에 유의한다!
record배열의 인덱스 값을 그대로 사용하면 길이가 맞지 않으므로, 변수 idx를 따로 만들어 Enter과 Leave일 때만 다음 인덱스로 넘어가도록 처리했다.
🔺 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import java.util.*;
class Solution {
public String[] solution(String[] record) {
HashMap<String, String> map = new HashMap<>();
int cnt = 0;
for(int i = 0 ; i < record.length ; i++) {
String[] str = record[i].split(" ");
String cmd = str[0];
String id = str[1];
if(cmd.equals("Enter")) {
cnt++;
if(map.containsKey(id))
map.replace(id, str[2]);
else
map.put(id, str[2]);
}
else if(cmd.equals("Leave")) {
cnt++;
}
else if(cmd.equals("Change")) {
map.replace(id, str[2]);
}
}
String[] answer = new String[cnt];
int idx = 0;
for(int i = 0 ; i < record.length ; i++) {
String[] str = record[i].split(" ");
String cmd = str[0];
String id = str[1];
if(cmd.equals("Enter"))
answer[idx++] = map.get(id) + "님이 들어왔습니다.";
else if(cmd.equals("Leave"))
answer[idx++] = map.get(id) + "님이 나갔습니다.";
}
return answer;
}
}
|
cs |
➕ 다른 풀이 방식
- map에 저장할 때 (Enter) containsKey로 갖고 있는지 확인 안해도 되고, 그냥 map.put(id, 닉네임) 해도 된다.
- 배열 대신 ArrayList를 사용하셔서 일단 처음에는 리스트에 값을 넣게 하셨고, 나중에 바뀐 닉네임 map에서 가져와 업데이트해주셨다. (indexOf, substring 사용)
[프로그래머스] 오픈채팅방(java)
오픈채팅방처음엔 유저 아이디와 닉네임을 담고 있는 Class를 만들어서 닉네임이 바뀌었을 경우 유저아이디를 찾아 닉네임을 바꿔주는 방식으로 코드를 짰는데, 테스트케이스를 죄다 틀리고 시
velog.io
[프로그래머스] 오픈채팅방 (Java)
프로그래머스 오픈채팅방이런 문제가 너무 좋다. 구조를 생각하고 구현하면 생각한대로 척척되는... 그렇다고 내 코드가 완벽한건 아니지만 그래도 뭔가 체계적으로 뭔가 된다는 느낌이 들 때
velog.io
💦 어려웠던 점
23분 소요 (구현 20분 / 디버깅 3분)
- 한꺼번에 Map에 넣으면서 출력하게 할까 하다가 그럼 또 내 머릿속에서 꼬여서 못 구현할 것 같아서 그냥 따로따로 진행했다..
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |