http://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/
확실이 뭔가 내가 그동안 백준에서 풀던 알고리즘과는 좀 다르다는 느낌을 받았다. 문제 설명이 생각보다 긴데, 핵심을 그렇게 어렵지 않은 것 같다. 아무래도 1번 문제여서 그런듯
문제를 보자마자 1분 고민하다가....이거 map쓰면 되잖아? 생각이 들었다. 배열을 써도 풀릴 것 같긴한데 난 map을 좋아한다.
해결 방법은,
1. (사용자 아이디, 닉네임)으로 map을 만들고, status가 "Enter","Change"면 닉네임을 수정해준다.
2. 동시에, "Enter"이거나 "Leave"인 경우만 text를 출력해야 하기 때문에 size++를 해주고, 그 만큼 return 되는 배열의 크기를 만들었다.
3. for문을 한번 더 돌면서, status가 "Enter"이거나 "Leave"인 경우는 map의 key값을 사용하여 text를 만들어 주었다.
// https://www.welcomekakao.com/learn/courses/30/lessons/42888?language=java
import java.util.*;
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
Map<String, String> map = new HashMap<String, String>();
int i;
String status = "", userId = "", nick = "";
int size = 0;
for (i = 0; i < record.length; i++) {
String[] arr = record[i].split(" ");
if (arr.length == 3) {
status = arr[0];
userId = arr[1];
nick = arr[2];
} else {
status = arr[0];
userId = arr[1];
}
if (status.equals("Enter") || status.equals("Leave")) {
size++;
}
if (status.equals("Enter") || status.equals("Change")) {
map.put(userId, nick);
}
}
answer = new String[size];
int index = 0;
for (i = 0; i < record.length; i++) {
String[] arr = record[i].split(" ");
status = arr[0];
userId = arr[1];
String text;
if (status.equals("Enter")) {
text = map.get(userId) + "님이 들어왔습니다.";
answer[index++] = text;
} else if (status.equals("Leave")) {
text = map.get(userId) + "님이 나갔습니다.";
answer[index++] = text;
}
}
return answer;
}
}
'알고리즘 문제' 카테고리의 다른 글
[알고리즘 문제] 백준7576 - 토마토 (0) | 2019.08.30 |
---|---|
카카오 코딩테스트 - 후보키 (0) | 2019.08.28 |
[알고리즘 문제] 백준1371 - 가장 많은 글자 (0) | 2019.08.23 |
[알고리즘 문제] 백준9933 - 민균이의 비밀번호 (0) | 2019.08.23 |
[알고리즘 문제] 백준11559 - Puyo Puyo (0) | 2019.08.21 |