문제 내용
제출한 코드
import java.util.*;
public class Solution {
static public List<String> solution(String[] record) {
List<String> answer = new ArrayList<>();
HashMap<String, String> info = new HashMap<>();
Queue<String> queue = new LinkedList<>();
for(String r : record) {
String input = r.split(" ")[0];
String uid = r.split(" ")[1];
if(input.equals("Enter")) {
String name = r.split(" ")[2];
info.put(uid, name);
queue.add("Enter " + uid);
} else if(input.equals("Change")) {
String name = r.split(" ")[2];
info.put(uid, name);
queue.add("Change " + uid);
} else {
String name = info.get(uid);
queue.add("Leave " + uid);
}
}
for(String e : queue) {
String input = e.split(" ")[0];
String uid = e.split(" ")[1];
if(input.equals("Enter")) {
answer.add(info.get(uid) + "님이 들어왔습니다.");
} else if (input.equals("Change")) {
continue;
} else {
answer.add(info.get(uid) + "님이 나갔습니다.");
}
}
return answer;
}
public static void main(String[] args) {
String[] record = {"Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"};
System.out.println(solution(record));
}
}
후기
문제를 처음 보자마자 입력받은 유저의 UID와 닉네임을 담을 수 있는 배열이나 , 리스트 등 여러 방식의 풀이가 떠올랐지만, 얼마전에 알고리즘 문제를 풀며 적용했던 HashMap 으로 풀어보고싶다는 생각이 들었다. 일단 초기에 문제에서의 접근은 Enter, Change, Leave 크게 세가지의 명령을 각각 처리해줘야 한다는 내용으로 아래의 수도 코드를 작성해보았다
HashMap<String, String> info
Enter: UID + 닉네임 Map에 저장하고 Enter UID 메시지 큐 추가
Change: UID 닉네임 변경
Leave: Leave UID 메시지 큐 추가
큐를 순회하며 메시지를 생성
위 수도코드에서도 나와있듯이 전체적인 플로우는
먼저 유저의 UID를 입력 받은 뒤, UID를 기준으로 닉네임을 관리하고 명령에 따라 메시지를 생성하여 반환해주었다
아래에는 해당 문제에서 사용했던 r.split 과 HashMap에 대한 설명을 담았으니 참고해주면 더 좋을거같다
split
split이란 ? 문자열을 특정 구분자를 기준으로 분할하여 배열로 반환해주는 메서드
아래의 코드를 참고하면 이해가 더 빠를 수 있다
String input = r.split(" ")[0]; 공백을 기준으로 첫번째 단어를 추출
String uid = r.split(" ")[1]; 공백 기준, 두번째 단어 추출
위 문제에서는 r.split과 e.split 모두 동일한 목적으로 명령어랑 UID를 추출하기 위해 사용했다
HashMap
HashMap이란? 키-값(Key-Value) 형태로 데이터를 저장하는 자료구조
1. put(key + value): 데이터를 삽입 or 기존 값을 덮어쓰기
2. get(key): 키에 해당하는 값을 반환
3. containsKey(key): 키가 존재하는지 확인
'알고리즘' 카테고리의 다른 글
백준(1193번, 분수찾기, 실버V) (0) | 2025.02.18 |
---|---|
프로그래머스(입국심사, LV3) (0) | 2025.02.14 |
백준(2751번, 수 정렬하기 2, 실버V) (1) | 2025.02.08 |
백준(12891번, DNA 비밀번호, 실버II) (0) | 2025.02.05 |
백준(1940번, 주몽, 실버IV) (1) | 2025.01.30 |