728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42888
풀이 방법
닉네임을 가지고 있는 User 클래스와 Map의 key 값을 userId로 활용하여 풀이하였습니다.
내 코드(JAVA)
class User {
private String nickName;
public User(String nickName) {
this.nickName = nickName;
}
public void changeNickName(String nickName) {
this.nickName = nickName;
}
public String getNickName() {
return nickName;
}
}
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
Map<String, User> commands = new LinkedHashMap<>();
for (String command : record) {
String[] arr = command.split(" ");
if(arr.length == 2) {
continue;
}
String initCommand = arr[0];
String userId = arr[1];
String nickName = arr[2];
if("Enter".equals(initCommand)) {
commands.put(userId, new User(nickName));
} else if ("Change".equals(initCommand)) {
commands.get(userId).changeNickName(nickName);
}
}
List<String> answerList = new ArrayList<>();
for (String command : record) {
String[] arr = command.split(" ");
String initCommand = arr[0];
String userId = arr[1];
String nickName = commands.get(userId).getNickName();
if("Enter".equals(initCommand)) {
answerList.add(nickName + "님이 들어왔습니다.");
} else if ("Leave".equals(initCommand)) {
answerList.add(nickName + "님이 나갔습니다.");
}
}
answer = answerList.toArray(new String[0]);
return answer;
}
}
리팩토링 코드
다른 분들의 답을 참고하여 작성해본 코드입니다.
class User {
private String nickName;
public User(String nickName) {
this.nickName = nickName;
}
public void changeNickName(String nickName) {
this.nickName = nickName;
}
public String getNickName() {
return nickName;
}
}
class Command {
private String command;
private String userId;
public Command(String command, String userId) {
this.command = command;
this.userId = userId;
}
public String getCommand() {
return command;
}
public String getUserId() {
return userId;
}
}
class Solution {
public String[] solution(String[] records) {
String[] answer = {};
Map<String, User> userMap = new LinkedHashMap<>();
List<Command> commandList = new ArrayList<>();
final String ENTER_FORMAT = "%s님이 들어왔습니다.";
final String LEAVE_FORMAT = "%s님이 나갔습니다.";
for (String record : records) {
String[] arr = record.split(" ");
String command = arr[0];
String userId = arr[1];
String nickName = "";
if("Enter".equals(command)) {
nickName = arr[2];
userMap.put(userId, new User(nickName));
commandList.add(new Command(command, userId));
} else if ("Leave".equals(command)) {
commandList.add(new Command(command, userId));
} else if ("Change".equals(command)) {
nickName = arr[2];
userMap.get(userId).changeNickName(nickName);
}
}
answer = new String[commandList.size()];
for (int i = 0; i < commandList.size(); i++) {
String userId = commandList.get(i).getUserId();
String command = commandList.get(i).getCommand();
answer[i] = String.format("Enter".equals(command) ? ENTER_FORMAT : LEAVE_FORMAT, userMap.get(userId).getNickName());
}
return answer;
}
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/JAVA] 2525. 오븐 시계 (0) | 2022.07.01 |
---|---|
[백준/JAVA] 2480. 주사위 세개 (0) | 2022.06.30 |
[프로그래머스/JAVA] 신고 결과 받기 (0) | 2022.05.29 |
[백준/JAVA] 2508. 사탕 박사 고창영 (0) | 2022.04.06 |
[백준/JAVA] 1100. 하얀칸 (0) | 2022.04.04 |
댓글