1. λ¬Έμ μ€λͺ
μΉ΄μΉ΄μ€ν‘ μ€νμ±ν λ°©μμλ μΉκ΅¬κ° μλ μ¬λλ€κ³Ό λνλ₯Ό ν μ μλλ°, λ³Έλ λλ€μμ΄ μλ κ°μμ λλ€μμ μ¬μ©νμ¬ μ±ν λ°©μ λ€μ΄κ° μ μλ€.
μ μ μ¬μμΈ κΉν¬λ£¨λ μΉ΄μΉ΄μ€ν‘ μ€ν μ±ν λ°©μ κ°μ€ν μ¬λμ μν΄, λ€μν μ¬λλ€μ΄ λ€μ΄μ€κ³ , λκ°λ κ²μ μ§μΌλ³Ό μ μλ κ΄λ¦¬μμ°½μ λ§λ€κΈ°λ‘ νλ€. μ±ν λ°©μ λκ΅°κ° λ€μ΄μ€λ©΄ λ€μ λ©μμ§κ° μΆλ ₯λλ€.
"[λλ€μ]λμ΄ λ€μ΄μμ΅λλ€."
μ±ν λ°©μμ λκ΅°κ° λκ°λ©΄ λ€μ λ©μμ§κ° μΆλ ₯λλ€.
"[λλ€μ]λμ΄ λκ°μ΅λλ€."
μ±ν λ°©μμ λλ€μμ λ³κ²½νλ λ°©λ²μ λ€μκ³Ό κ°μ΄ λ κ°μ§μ΄λ€.
- μ±ν λ°©μ λκ° ν, μλ‘μ΄ λλ€μμΌλ‘ λ€μ λ€μ΄κ°λ€.
- μ±ν λ°©μμ λλ€μμ λ³κ²½νλ€.
λλ€μμ λ³κ²½ν λλ κΈ°μ‘΄μ μ±ν λ°©μ μΆλ ₯λμ΄ μλ λ©μμ§μ λλ€μλ μ λΆ λ³κ²½λλ€.
μλ₯Ό λ€μ΄, μ±ν λ°©μ "Muzi"μ "Prodo"λΌλ λλ€μμ μ¬μ©νλ μ¬λμ΄ μμλλ‘ λ€μ΄μ€λ©΄ μ±ν λ°©μλ λ€μκ³Ό κ°μ΄ λ©μμ§κ° μΆλ ₯λλ€.
"Muziλμ΄ λ€μ΄μμ΅λλ€."
"Prodoλμ΄ λ€μ΄μμ΅λλ€."
μ±ν λ°©μ μλ μ¬λμ΄ λκ°λ©΄ μ±ν λ°©μλ λ€μκ³Ό κ°μ΄ λ©μμ§κ° λ¨λλ€.
"Muziλμ΄ λ€μ΄μμ΅λλ€."
"Prodoλμ΄ λ€μ΄μμ΅λλ€."
"Muziλμ΄ λκ°μ΅λλ€."
Muziκ° λκ°ν λ€μ λ€μ΄μ¬ λ, Prodo λΌλ λλ€μμΌλ‘ λ€μ΄μ¬ κ²½μ° κΈ°μ‘΄μ μ±ν λ°©μ λ¨μμλ Muziλ Prodoλ‘ λ€μκ³Ό κ°μ΄ λ³κ²½λλ€.
"Prodoλμ΄ λ€μ΄μμ΅λλ€."
"Prodoλμ΄ λ€μ΄μμ΅λλ€."
"Prodoλμ΄ λκ°μ΅λλ€."
"Prodoλμ΄ λ€μ΄μμ΅λλ€."
μ±ν λ°©μ μ€λ³΅ λλ€μμ νμ©νκΈ° λλ¬Έμ, νμ¬ μ±ν λ°©μλ ProdoλΌλ λλ€μμ μ¬μ©νλ μ¬λμ΄ λ λͺ μ΄ μλ€. μ΄μ , μ±ν λ°©μ λ λ²μ§Έλ‘ λ€μ΄μλ Prodoκ° RyanμΌλ‘ λλ€μμ λ³κ²½νλ©΄ μ±ν λ°© λ©μμ§λ λ€μκ³Ό κ°μ΄ λ³κ²½λλ€.
"Prodoλμ΄ λ€μ΄μμ΅λλ€."
"Ryanλμ΄ λ€μ΄μμ΅λλ€."
"Prodoλμ΄ λκ°μ΅λλ€."
"Prodoλμ΄ λ€μ΄μμ΅λλ€."
μ±ν λ°©μ λ€μ΄μ€κ³ λκ°κ±°λ, λλ€μμ λ³κ²½ν κΈ°λ‘μ΄ λ΄κΈ΄ λ¬Έμμ΄ λ°°μ΄ recordκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, λͺ¨λ κΈ°λ‘μ΄ μ²λ¦¬λ ν, μ΅μ’ μ μΌλ‘ λ°©μ κ°μ€ν μ¬λμ΄ λ³΄κ² λλ λ©μμ§λ₯Ό λ¬Έμμ΄ λ°°μ΄ ννλ‘ return νλλ‘ solution ν¨μλ₯Ό μμ±νλΌ.
μ νμ¬ν
- recordλ λ€μκ³Ό κ°μ λ¬Έμμ΄μ΄ λ΄κΈ΄ λ°°μ΄μ΄λ©°, κΈΈμ΄λ
1
μ΄μ100,000
μ΄νμ΄λ€. - λ€μμ recordμ λ΄κΈ΄ λ¬Έμμ΄μ λν μ€λͺ
μ΄λ€.
- λͺ¨λ μ μ λ [μ μ μμ΄λ]λ‘ κ΅¬λΆνλ€.
- [μ μ μμ΄λ] μ¬μ©μκ° [λλ€μ]μΌλ‘ μ±ν λ°©μ μ μ₯ - "Enter [μ μ μμ΄λ] [λλ€μ]" (ex. "Enter uid1234 Muzi")
- [μ μ μμ΄λ] μ¬μ©μκ° μ±ν λ°©μμ ν΄μ₯ - "Leave [μ μ μμ΄λ]" (ex. "Leave uid1234")
- [μ μ μμ΄λ] μ¬μ©μκ° λλ€μμ [λλ€μ]μΌλ‘ λ³κ²½ - "Change [μ μ μμ΄λ] [λλ€μ]" (ex. "Change uid1234 Muzi")
- 첫 λ¨μ΄λ Enter, Leave, Change μ€ νλμ΄λ€.
- κ° λ¨μ΄λ 곡백μΌλ‘ ꡬλΆλμ΄ μμΌλ©°, μνλ²³ λλ¬Έμ, μλ¬Έμ, μ«μλ‘λ§ μ΄λ£¨μ΄μ Έμλ€.
- μ μ μμ΄λμ λλ€μμ μνλ²³ λλ¬Έμ, μλ¬Έμλ₯Ό ꡬλ³νλ€.
- μ μ μμ΄λμ λλ€μμ κΈΈμ΄λ
1
μ΄μ10
μ΄νμ΄λ€. - μ±ν λ°©μμ λκ° μ μ κ° λλ€μμ λ³κ²½νλ λ± μλͺ» λ μ λ ₯μ μ£Όμ΄μ§μ§ μλλ€.
μ μΆλ ₯ μ
record | result |
---|---|
["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"] |
["Prodoλμ΄ λ€μ΄μμ΅λλ€.", "Ryanλμ΄ λ€μ΄μμ΅λλ€.", "Prodoλμ΄ λκ°μ΅λλ€.", "Prodoλμ΄ λ€μ΄μμ΅λλ€."] |
μ μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ #1
λ¬Έμ μ μ€λͺ
κ³Ό κ°λ€.
μΆμ²: νλ‘κ·Έλλ¨Έμ€ μ½λ© ν μ€νΈ μ°μ΅, https://school.programmers.co.kr/learn/challenges
2. μ κ·Ό λ°©μ
hashMapμ idλ₯Ό key, λλ€μμ valueλ‘ ν΄μ κ°μ μ μ₯ν΄λκ³ , μμ μμ²μ΄ μμ λλ§λ€ λ°κΏ¨λ€.
3. μ½λ λΆμ
import java.io.*;
import java.util.*;
class Solution {
public String[] solution(String[] record) {
HashMap<String, String> map = new HashMap<>();
for(int i = 0; i < record.length; i++){
StringTokenizer st = new StringTokenizer(record[i]);
String order = st.nextToken();
String id = st.nextToken();
String nickname = null;
if(!order.equals("Leave")){
nickname = st.nextToken();
}
if(order.equals("Enter") || order.equals("Change")){
map.put(id, nickname);
}
}
ArrayList<String> list = new ArrayList<>();
for(int i = 0; i < record.length; i++) {
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(record[i]);
String order = st.nextToken();
String id = st.nextToken();
String nickname = map.get(id);
switch(order){
case "Enter":
sb.append(nickname).append("λμ΄ λ€μ΄μμ΅λλ€.");
break;
case "Leave":
sb.append(nickname).append("λμ΄ λκ°μ΅λλ€.");
break;
case "Change":
continue;
}
list.add(sb.toString());
}
String [] answer = new String [list.size()];
for(int i = 0; i < answer.length; i++){
answer[i] = list.get(i);
}
return answer;
}
}
4. μ’μμ λ§μ΄ λ°μ λ€λ₯Έ μ¬λμ νμ΄
import java.util.ArrayList;
import java.util.HashMap;
class Solution {
private static final String ENTER_FORMAT = "%sλμ΄ λ€μ΄μμ΅λλ€.";
private static final String LEAVE_FORMAT = "%sλμ΄ λκ°μ΅λλ€.";
private HashMap<String, UserInfo> userMap = new HashMap<>();
private class UserInfo {
public String userId;
public String nickName;
public UserInfo(String userId, String nickName) {
this.userId = userId;
this.nickName = nickName;
}
}
private class Command {
public char command;
public String userId;
public Command(char command, String userName) {
this.command = command;
this.userId = userName;
}
}
public String[] solution(String[] records) {
ArrayList<Command> commandList = new ArrayList<>();
for (String record : records) {
String[] split = record.split(" ");
String command = split[0];
String userId = split[1];
String nickName = null;
switch(command.charAt(0)) {
case 'E': // Enter
nickName = split[2];
if(userMap.containsKey(userId) == false) {
userMap.put(userId, new UserInfo(userId, nickName));
} else {
userMap.get(userId).nickName = nickName;
}
commandList.add(new Command(command.charAt(0), userId));
break;
case 'L': // Leave
commandList.add(new Command(command.charAt(0), userId));
break;
case 'C': // Change
nickName = split[2];
userMap.get(userId).nickName = nickName;
break;
}
}
return commandList.stream()
.map(cmd -> String.format( cmd.command == 'E' ? ENTER_FORMAT : LEAVE_FORMAT , userMap.get(cmd.userId).nickName))
.toArray(ary -> new String[commandList.size()]);
}
}
μ΄κ±΄ μ§μ§ νλ‘μ νΈ νλ―μ΄ κ°μ²΄ μ§ν₯μ μ΄μ©νμ¬ λ¬Έμ λ₯Ό νμλ€.
λͺ°λλ λΆλΆ μ 리
String.format("μ κ·μ ν¬ν¨ν λ¬Έμμ΄", "μ κ·μμ λ€μ΄κ° κ°")
μμ: String. format("%sλμ΄ μ
μ₯νμμ΅λλ€.", userInfo.nickname)
μ΄λ κ² μ°λ©΄ λ³λͺ
μ΄ λ€μ΄κ°λ€.
stream.map(x -> f(x))
κΈ°μ‘΄ stream κ°μ²΄μ μμλ€μ μ°¨λ‘λλ‘ f(x)μ μΈμλ‘ λ£μ΄μ, κ·Έ κ²°κ³Όκ°λ€λ‘ μ΄λ£¨μ΄μ§, μλ‘μ΄ stream κ°μ²΄λ₯Ό λ°ννλ€.
stream.toArray(x -> new Type[])
stream κ°μ²΄λ₯Ό λ°°μ΄λ‘ λ³νν΄μ£Όλ ν¨μ.
λ΄κ° μ μ κ²κ³Ό κ°μ΄ λ°°μ΄μ μ¬μ΄μ¦λ₯Ό μ μ μ΄μ£Όλ©΄, .toArray ν¨μκ° stream κ°μ²΄μ μμλ₯Ό μΌμΌν μΈμ΄μ, λ°°μ΄μ ν¬κΈ°λ₯Ό μ νκΈ° λλ¬Έμ λ릴 μ μλ€.
λ°λ©΄ μμ μμ μ²λΌ λ°°μ΄μ sizeλ₯Ό μ μ΄μ£Όλ©΄ μλλ©΄μμ λ«λ€.