728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
import java.util.*;
class Solution {
public String[] solution(String[] record) {
ArrayList<String> answer = new ArrayList<>();
String[][] list = new String[record.length][2];
HashMap<String, String> name = new HashMap<>();
for (int i = 0; i < record.length; i++) {
String[] re = record[i].split(" ");
list[i][0] = re[0];
list[i][1] = re[1];
if (re[0].equals("Enter") || re[0].equals("Change")) {
name.put(re[1], re[2]);
}
}
for (int i = 0; i < list.length; i++) {
if (list[i][0].equals("Enter")) {
answer.add(name.get(list[i][1]) + "님이 들어왔습니다.");
} else if (list[i][0].equals("Leave")){
answer.add(name.get(list[i][1]) + "님이 나갔습니다.");
}
}
return answer.toArray(new String[answer.size()]);
}
}
테스트 1 〉 | 통과 (2.19ms, 73.3MB) |
테스트 2 〉 | 통과 (2.23ms, 75.2MB) |
테스트 3 〉 | 통과 (2.12ms, 76.2MB) |
테스트 4 〉 | 통과 (2.33ms, 76.4MB) |
테스트 5 〉 | 통과 (6.94ms, 75.8MB) |
테스트 6 〉 | 통과 (6.18ms, 88.1MB) |
테스트 7 〉 | 통과 (6.91ms, 77MB) |
테스트 8 〉 | 통과 (5.06ms, 81MB) |
테스트 9 〉 | 통과 (6.84ms, 82.6MB) |
테스트 10 〉 | 통과 (6.35ms, 79.8MB) |
테스트 11 〉 | 통과 (5.49ms, 90.7MB) |
테스트 12 〉 | 통과 (6.56ms, 78.2MB) |
테스트 13 〉 | 통과 (7.23ms, 78MB) |
테스트 14 〉 | 통과 (7.46ms, 86.1MB) |
테스트 15 〉 | 통과 (3.43ms, 86.7MB) |
테스트 16 〉 | 통과 (2.63ms, 79MB) |
테스트 17 〉 | 통과 (3.82ms, 82.9MB) |
테스트 18 〉 | 통과 (3.45ms, 81MB) |
테스트 19 〉 | 통과 (7.14ms, 85.4MB) |
테스트 20 〉 | 통과 (7.64ms, 85.2MB) |
테스트 21 〉 | 통과 (6.84ms, 78.4MB) |
테스트 22 〉 | 통과 (8.49ms, 74.9MB) |
테스트 23 〉 | 통과 (5.17ms, 79.8MB) |
테스트 24 〉 | 통과 (8.81ms, 87.9MB) |
테스트 25 〉 | 통과 (125.01ms, 169MB) |
테스트 26 〉 | 통과 (117.24ms, 160MB) |
테스트 27 〉 | 통과 (113.14ms, 162MB) |
테스트 28 〉 | 통과 (122.73ms, 178MB) |
테스트 29 〉 | 통과 (93.02ms, 175MB) |
테스트 30 〉 | 통과 (81.91ms, 168MB) |
테스트 31 〉 | 통과 (82.04ms, 162MB) |
테스트 32 〉 | 통과 (71.11ms, 164MB) |
유저 ID는 그대로인데 이름은 변경할 수 있다.
그래서 for문으로 record를 순회할건데, 이 때 record[i]의 내용이 Enter이나 Change이면 이름을 변경될 수 있다.
그래서 유저ID에 맞게 이름을 넣기 위해서 해시맵을 사용하였고,
Enter이나 Change면 이름이 같든 다르든 그냥 변경하도록 했다.
그리고 나서 할 것이 들어왔다 나갔다 하는 문구를 적을 차례인데,
Enter면 들어왔다고, Leave면 나갔다고 문구를 적고 Change는 그냥 넘어가는 식으로 작성하였다.
더보기
처음 작성한 코드 :
import java.util.*;
class Solution {
public String[] solution(String[] record) {
HashMap<String, String> name = new HashMap<>();
ArrayList<String> data = new ArrayList<>();
for (int i = 0; i < record.length; i++){
String[] temp = record[i].split(" ");
if (temp[0].equals("Leave")){
data.add(record[i]);
continue;
}
if (temp[0].equals("Enter")){
data.add(record[i]);
name.put(temp[1], temp[2]);
continue;
}
if (temp[0].equals("Change")){
name.put(temp[1], temp[2]);
}
}
String[] answer = new String[data.size()];
for (int i = 0; i < data.size(); i++){
String[] temp = data.get(i).split(" ");
String st = name.get(temp[1]);
StringBuilder sb = new StringBuilder(st);
if (temp[0].equals("Enter")){
sb.append("님이 들어왔습니다.");
} else if (temp[0].equals("Leave")){
sb.append("님이 나갔습니다.");
}
answer[i] = sb.toString();
}
return answer;
}
}
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 숫자 문자열과 영단어 (1단계) (0) | 2022.03.28 |
---|---|
[kotlin] 프로그래머스 - 직사각형 별찍기 (1단계) (0) | 2022.03.25 |
[Java] 프로그래머스 - 문자열 압축 (2단계) (0) | 2022.03.24 |
[Java] 프로그래머스 - 신규 아이디 추천 (1단계) (0) | 2022.03.23 |
[Java] 프로그래머스 - 로또의 최고 순위와 최저 순위 (1단계) (0) | 2022.03.22 |