반응형
본 풀이는 java
언어를 사용하였습니다.
문제 보러가기
풀이
잘 생각해보면 유저의 아이디는 변하지 않고
, 변하는 건 유저의 닉네임이다.
따라서 유저의 아이디 닉네임을 HashMap
으로 저장해놓고,
결과를 출력하기 전에 모든 record 를 순회하면서 HashMap 에 있는 유저의 닉네임으로 변경시켜준 후 결과를 출력하면 쉽게 풀수있다.
먼저 아이디, 닉네임을 저장 할 HashMap 을 하나 만들어준다.
Map<String, String> userIds = new HashMap<>();
그 후 record 를 순회하면서 값을 체크해주는데,
Leave 의 경우 2 단어 (행동, 아이디) 로 들어오기 때문에 닉네임을 임의로 빈 값으로 지정한다.
for (String userInfo : record) {
StringTokenizer st = new StringTokenizer(userInfo, " ");
String behavior = st.nextToken();
String userId = st.nextToken();
String nickname;
if (behavior.equals(LEAVE)) {
nickname = "";
} else {
nickname = st.nextToken();
userIds.put(userId, nickname);
}
if (behavior.equals(CHANGE)) {
userIds.put(userId, nickname);
continue;
}
users.add(new User(behavior, userId, nickname));
}
HashMap 으로 저장되는건 Enter, Change 의 경우이기 때문에 위와같이 처리했다.
추가로 유저의 정보는 User 클래스로 만들어서 코드를 이해하기 쉽도록 하였다.
class User {
private final String behavior;
private final String userId;
private String nickname;
public User(String behavior, String userId, String nickname) {
this.behavior = behavior;
this.userId = userId;
this.nickname = nickname;
}
public void updateNickname(String nickname) {
this.nickname = nickname;
}
public String getBehavior() {
return behavior;
}
public String getUserId() {
return userId;
}
public String getNickname() {
return nickname;
}
}
그 다음은 간단하다.
HashMap 에 저장되어있는 닉네임이 변경된 최종의 닉네임이므로 user 를 순회하면서 변경된 닉네임으로 update 처리
하면 된다.
for (User user : users) {
user.updateNickname(userIds.get(user.getUserId()));
}
마지막으로 출력 양식에 맞게 결과 값을 넣어주면 끝이다.
List<String> result = new ArrayList<>();
for (User user : users) {
if (user.getBehavior().equals(ENTER)) {
result.add(user.getNickname() + "님이 들어왔습니다.");
continue;
}
if (user.getBehavior().equals(LEAVE)) {
result.add(user.getNickname() + "님이 나갔습니다.");
}
}
코드
import java.util.*;
public class Solution {
private static final String ENTER = "Enter";
private static final String LEAVE = "Leave";
private static final String CHANGE = "Change";
public String[] solution(String[] record) {
List<User> users = new ArrayList<>();
Map<String, String> userIds = new HashMap<>();
for (String userInfo : record) {
StringTokenizer st = new StringTokenizer(userInfo, " ");
String behavior = st.nextToken();
String userId = st.nextToken();
String nickname;
if (behavior.equals(LEAVE)) {
nickname = "";
} else {
nickname = st.nextToken();
userIds.put(userId, nickname);
}
if (behavior.equals(CHANGE)) {
userIds.put(userId, nickname);
continue;
}
users.add(new User(behavior, userId, nickname));
}
for (User user : users) {
user.updateNickname(userIds.get(user.getUserId()));
}
List<String> result = new ArrayList<>();
for (User user : users) {
if (user.getBehavior().equals(ENTER)) {
result.add(user.getNickname() + "님이 들어왔습니다.");
continue;
}
if (user.getBehavior().equals(LEAVE)) {
result.add(user.getNickname() + "님이 나갔습니다.");
}
}
return result.toArray(new String[0]);
}
}
class User {
private final String behavior;
private final String userId;
private String nickname;
public User(String behavior, String userId, String nickname) {
this.behavior = behavior;
this.userId = userId;
this.nickname = nickname;
}
public void updateNickname(String nickname) {
this.nickname = nickname;
}
public String getBehavior() {
return behavior;
}
public String getUserId() {
return userId;
}
public String getNickname() {
return nickname;
}
}
회고
HashMap 을 생각해서 풀었더니 생각보다 너무 쉽게 문제가 풀려서 기분이 좋았다.
카카오 문제 별거 없구나ㅎ_ㅎ
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
카카오프렌즈 컬러링북 (0) | 2022.07.12 |
---|---|
2017 팁스타운 짝지어 제거하기 (0) | 2022.07.09 |
프로그래머스 : 완주하지 못한 선수 (0) | 2021.08.13 |
프로그래머스 : 기능개발 (0) | 2021.08.11 |
프로그래머스 : 크레인 인형뽑기 게임 (0) | 2020.04.03 |
댓글