기술/Algorithm
카카오 코딩테스트 1번
leatherjean
2018. 9. 17. 03:01
xxxxxxxxxx
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class kakao_1 {
static String[] record = {"Enter uid1234 Muzi", "Enter uid4567 Prodo", "Leave uid1234", "Enter uid1234 Prodo", "Change uid4567 Ryan"};
public static void main(String[] args) {
System.out.println(solution(record));
}
public static String[] solution(String[] record) {
Map<String, String> uidNickNameMap = new HashMap<>();
String[] splitString;
List<String> answer = new ArrayList<>();
String[] realAnswer = new String[answer.size()];
for (int i = 0; i < record.length; i++) {
splitString = record[i].split(" ");
if (splitString[0].equals("Enter")) {
uidNickNameMap.put(splitString[1], splitString[2]);
continue;
}
if (splitString[0].equals("Change")) {
uidNickNameMap.put(splitString[1], splitString[2]);
continue;
}
}
for (int i = 0; i < record.length; i++) {
splitString = record[i].split(" ");
if (!splitString[0].equals("Change"))
if (splitString[0].equals("Enter")) {
answer.add(uidNickNameMap.get(splitString[1]) + "님이 들어왔습니다.");
} else if (splitString[0].equals("Leave")) {
answer.add(uidNickNameMap.get(splitString[1]) + "님이 나갔습니다.");
}
}
return answer.toArray(realAnswer);
}
}
카카오 블라인드 테스트 1번문제를 풀어보았다. 문제는 카카오톡 오픈채팅방 입장과 퇴장과 닉네임변경 관련된 내용이었다. UID와 NickName을 Map으로 구현하고, Enter과 Change가 일어날때 마다 Map을 최신화 시켜주면 될 것이라고 생각하고 로직을 구현했다. 이렇게 되면 For문을 처음부터 끝까지 한바퀴 돌아서 마지막에 변경된 이름을 Map에 저장해놓고, For 문을 다시 한 번 쭉 돌면서 그 결과를 바탕으로 출력만 하면 된다. 성능은 고려하지 않았으나 얼핏봐도 O(N)이다. 문제가 쉬운 편이었다.
answer를 array로 구현하려했으나 Change일 경우는 배제하고 출력해야해서... 결국 index 로직짜기 귀찮아서 List로 구현한 뒤, toArray로 변환해줬다. 아무리 빨리 풀려고 했다하지만 이런게 습관이 되면 안된다. 애초에 더러운 코드 생각이 안들도록 노력해야겠다.