๐ 1. ๋ฌธ์ ์ค๋ช
๐ก 2. ํ์ด ๊ณผ์
์ผ๋จ ๋ฌธ์ ๊ฐ ๊ธธ์ด๋ ๋๋ฌด ๊ธธ์ด์ ๋๋ฆ๋๋ก ์์ฝ์ ํด ๋ดค๋ค.
record ๋ฐฐ์ด์ ์ ์ฅ ๋๋ ํด์ฅ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ 2์ฐจ์ ๋ฐฐ์ด์ด๋ค.
- ์ ์ฅ์ ["Enter id ๋๋ค์"] → "๋๋ค์๋์ด ๋ค์ด์์ต๋๋ค."
- ํด์ฅ์ ["Leave id"] → "๋๋ค์๋์ด ๋๊ฐ์ต๋๋ค."
- ๋๋ณ์ ["Change id ๋๋ค์"]
record
- 0๋ฒ ์ธ๋ฑ์ค = ํ๋(์ ์ฅ/ํด์ฅ/๋๋ณ)
- 1๋ฒ ์ธ๋ฑ์ค = id
- 2๋ฒ ์ธ๋ฑ์ค = ๋๋ค์
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ์ฑํ ๋ฐฉ์ ๋ณด์ฌ์ง๋ ๋ฉ์ธ์ง์๋ ์ต์ข ์ ์ผ๋ก ๋ณ๊ฒฝ๋ ๋๋ค์์ด ๋ณด์ฌ์ ธ์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ํ ์์ด๋๊ฐ ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ์ฌ์ฉํ ๋๋ค์์ด ๋ฌด์์ธ์ง ์กฐํํ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋ณด์ฌ์ค ๋ ์์ด๋๊ฐ์ ๊ทธ ๋๋ค์์ผ๋ก ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค.
๋๋ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ Map์ ์ฌ์ฉํ๋ค.
โ ์ฑํ ๋ฐฉ ์ ์ฅ
- id์ ๋๋ค์ ๊ฐ์ ๋งคํํด์ ํ๋์ ๊ธฐ๋ก๋ง๋ค ๋๋ค์ ๋ณ๊ฒฝ์ฌํญ์ ์ ๋ฐ์ดํธํด์ ์ ์ฅํ๋ค.
Map<String, String> idMap = new HashMap<>(); // (id - nickname) Map
โ ๋๋ค์ ๋ณ๊ฒฝ
- ๋๋ค์์ ๋ณ๊ฒฝํ ๋๋ ์ฑํ ๋ฐฉ์ ๋ฉ์ธ์ง๊ฐ ํ์๋์ง ์๋๋ค.
- ๋ฐ๋ผ์ ๋ฉ์ธ์ง์์ ์ ์ธํ ์นด์ดํธ๋ฅผ ๋ณ๋๋ก ์ ์ธํด์ค ํ, change ์ผ ๋ ๋ง๋ค ๊ฐ์ 1์ฆ๊ฐ ์ํจ๋ค.
โ record๋ฅผ ์ํํ๋ฉด์ infomap์ key-value๋ก id-๋๋ค์ ์ ์ฅํ๊ธฐ
- record ๋ฐฐ์ด์ [i] ๋ฒ์งธ ๋ฌธ์๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํ ๋ค์, data๋ผ๋ ๋ฐฐ์ด์ ๋ด์์ค๋ค.
- data[0]์ด "Leave" -> continue ์๋ํ๋ฉด ์๋ ์ธ๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์
- data[0]์ด "Enter" -> data[1]๊ณผ data[2]๋ฅผ infomap์ ๋ด๋๋ค. (์์ด๋ / ๋๋ค์)
- ๋๋ค์ ๋ณ๊ฒฝ -> data[1]๊ณผ data[2]๋ฅผ infomap์ ๋ด์ ๋ค count++; (์ถ๋ ฅ ์ซ์์์ ์ ์ธํ๊ธฐ ์ํจ)
์ถ๋ ฅ ๋ฉ์ธ์ง๋ฅผ ๋ด์ String ํ์ ์ ๋ฐฐ์ด answer์ ์ ์ธํ๋ค.
์ด ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ record.length - count ์ด๋ค. (count๋ ์ ์ธ์ํฌ ๊ฐ์)
์ด์ record๋ฅผ ์ํํ๋ฉด์ nickname ๋ณ์์ infomap์ data[1]์ ๊ฐ์ ธ์ ์ต์ข
๋๋ค์์ ์ ์ฅํ๋ค.
์ด ๋ ๋๋ค์์ id๋ฅผ key๋ก ํด์ infomap์์ value๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ด๋ค.
๋๋ค์์ nickname ๋ณ์์ ๋ด๊ธด๋ค.
โญ 3. ์ ๋ต์ฝ๋
import java.util.*;
class Solution {
public String[] solution(String[] record) {
Map<String, String> infoMap = new HashMap<>(); // (id-nickname) Map
int count = 0;
for (int i = 0; i < record.length; i++) {
String[] data = record[i].split(" ");
if (data[0].equals("Leave")) { // ํด์ฅ
continue;
} else if (data[0].equals("Enter")) { // ์
์ฅ
infoMap.put(data[1], data[2]);
} else { // ๋๋ค์ ๋ณ๊ฒฝ
infoMap.put(data[1], data[2]);
count++;
}
}
String[] answer = new String[record.length - count];
int idx = 0;
for (int i = 0; i < record.length; i++) {
String[] data = record[i].split(" ");
String nickname = infoMap.get(data[1]);
if (data[0].equals("Enter")) { // ์
์ฅ ๋ฉ์์ง
answer[idx++] = nickname + "๋์ด ๋ค์ด์์ต๋๋ค.";
} else if (data[0].equals("Leave")) { // ํด์ฅ ๋ฉ์์ง
answer[idx++] = nickname + "๋์ด ๋๊ฐ์ต๋๋ค.";
}
}
return answer;
}
}
๐๐ป ์ข์์ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์ฝ๋
์ ํด๋์ค๋ก ํผ ์ด๊ท์ฒ ๋๊ณผ ydy๋์ ์ฝ๋
๊ฐ์ฒด์งํฅ ํผ ๋ฏธ์ณค๋ค
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()]);
}
}
๐ฆ 4. TMI
์คํ์ฑํ ๋ฐฉ ๋ฌธ์ ์์ด๋ ๊ฒ ๊ธธ์ด
์คํ ์ฑํ ๋ฐฉ ์ฐ์ง ๋ง๊ณ
๊ทธ๋ฅ ์ฑํ ํ์. ^_^
'Algorithm > JAVAํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] (Java / ์๋ฐ ) ์ ์ฐ๊ทผ๋ฌด์ ๋ฌธ์ ํ์ด (11) | 2025.02.14 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ฌธ์์ด ์๊ธฐ, ๋ ์์ ์ฐ์ฐ๊ฐ ๋น๊ตํ๊ธฐ (16) | 2025.02.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ฌธ์์ด ์๊ธฐ (15) | 2025.02.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ฌธ์์ด ๊ฒน์ณ์ฐ๊ธฐ (25) | 2025.02.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์๊ฒฉ์์คํ ๋ฌธ์ ํ์ด (26) | 2025.02.01 |