Created
January 2, 2022 15:02
2019 카카오 블라인드 문제풀이
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import java.util.HashMap; | |
public class Solution { | |
public void _test() { | |
System.out.println(arrayCompare(solution( | |
new String[]{"Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"}), | |
new String[]{"Prodo님이 들어왔습니다.", "Ryan님이 들어왔습니다.", "Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."})); | |
} | |
public String[] solution(String[] record) { | |
String[][] entities = new String[record.length][3]; | |
HashMap<String, String> hm = new HashMap<>(); | |
for(int i=0; i<record.length; i++){ | |
entities[i] = record[i].split(" "); | |
if(entities[i][0].equals("Enter") || entities[i][0].equals("Change")) hm.put(entities[i][1], entities[i][2]); | |
} | |
ArrayList<String> list = new ArrayList<>(); | |
for(int i=0; i<record.length; i++){ | |
if(entities[i][0].equals("Change")) continue; | |
StringBuilder sb = new StringBuilder(); | |
sb.append(hm.get(entities[i][1])); | |
sb.append("님이 "); | |
if(entities[i][0].equals("Enter")) sb.append("들어왔습니다."); | |
else sb.append("나갔습니다."); | |
list.add(sb.toString()); | |
} | |
return list.toArray(new String[]{}); | |
} | |
public boolean arrayCompare(String[] a, String[] b){ | |
if(a.length != b.length) return false; | |
else for(int i=0; i<a.length; i++) if(!a[i].equals(b[i])) return false; | |
return true; | |
} | |
} |
단순반복 결과
테스트 1 〉 통과 (0.29ms, 52.8MB)
테스트 2 〉 통과 (0.25ms, 52.8MB)
테스트 3 〉 통과 (0.56ms, 52.9MB)
테스트 4 〉 통과 (0.58ms, 53MB)
테스트 5 〉 통과 (6.53ms, 53.7MB)
테스트 6 〉 통과 (10.51ms, 54.1MB)
테스트 7 〉 통과 (6.37ms, 54.4MB)
테스트 8 〉 통과 (6.40ms, 54.8MB)
테스트 9 〉 통과 (7.01ms, 53.3MB)
테스트 10 〉 통과 (7.24ms, 54.2MB)
테스트 11 〉 통과 (3.93ms, 54MB)
테스트 12 〉 통과 (3.92ms, 53.5MB)
테스트 13 〉 통과 (6.31ms, 53.5MB)
테스트 14 〉 통과 (7.03ms, 56.4MB)
테스트 15 〉 통과 (0.33ms, 51.9MB)
테스트 16 〉 통과 (0.27ms, 52.8MB)
테스트 17 〉 통과 (0.95ms, 53.5MB)
테스트 18 〉 통과 (0.85ms, 52.8MB)
테스트 19 〉 통과 (6.66ms, 53.6MB)
테스트 20 〉 통과 (5.71ms, 53.1MB)
테스트 21 〉 통과 (5.48ms, 54.9MB)
테스트 22 〉 통과 (5.72ms, 53.2MB)
테스트 23 〉 통과 (6.97ms, 55MB)
테스트 24 〉 통과 (7.71ms, 54.6MB)
테스트 25 〉 통과 (264.71ms, 159MB)
테스트 26 〉 통과 (276.27ms, 163MB)
테스트 27 〉 통과 (280.95ms, 165MB)
테스트 28 〉 통과 (306.53ms, 183MB)
테스트 29 〉 통과 (302.72ms, 184MB)
테스트 30 〉 통과 (257.79ms, 158MB)
테스트 31 〉 통과 (284.10ms, 161MB)
테스트 32 〉 통과 (196.49ms, 152MB)
스트림 결과
테스트 1 〉 통과 (5.73ms, 81.4MB)
테스트 2 〉 통과 (3.90ms, 78MB)
테스트 3 〉 통과 (4.14ms, 75.2MB)
테스트 4 〉 통과 (4.81ms, 74.5MB)
테스트 5 〉 통과 (10.18ms, 79MB)
테스트 6 〉 통과 (7.59ms, 82.2MB)
테스트 7 〉 통과 (7.47ms, 82.9MB)
테스트 8 〉 통과 (8.99ms, 81.5MB)
테스트 9 〉 통과 (9.47ms, 79.2MB)
테스트 10 〉 통과 (9.44ms, 86.4MB)
테스트 11 〉 통과 (8.02ms, 78.8MB)
테스트 12 〉 통과 (9.87ms, 77.5MB)
테스트 13 〉 통과 (7.67ms, 81.6MB)
테스트 14 〉 통과 (11.26ms, 77.2MB)
테스트 15 〉 통과 (5.87ms, 69.4MB)
테스트 16 〉 통과 (4.45ms, 78MB)
테스트 17 〉 통과 (5.17ms, 80.6MB)
테스트 18 〉 통과 (5.20ms, 74.9MB)
테스트 19 〉 통과 (11.62ms, 78.3MB)
테스트 20 〉 통과 (10.48ms, 81.7MB)
테스트 21 〉 통과 (7.90ms, 77.8MB)
테스트 22 〉 통과 (10.82ms, 87.4MB)
테스트 23 〉 통과 (11.06ms, 76.6MB)
테스트 24 〉 통과 (9.35ms, 81.3MB)
테스트 25 〉 통과 (117.59ms, 188MB)
테스트 26 〉 통과 (110.50ms, 196MB)
테스트 27 〉 통과 (117.65ms, 201MB)
테스트 28 〉 통과 (132.58ms, 211MB)
테스트 29 〉 통과 (114.45ms, 204MB)
테스트 30 〉 통과 (114.38ms, 184MB)
테스트 31 〉 통과 (89.32ms, 205MB)
테스트 32 〉 통과 (89.85ms, 166MB)
스트림/해시맵처리를 forEachOrdered로
테스트 1 〉 통과 (4.22ms, 76.1MB)
테스트 2 〉 통과 (4.39ms, 68.6MB)
테스트 3 〉 통과 (5.29ms, 68.9MB)
테스트 4 〉 통과 (4.41ms, 80.4MB)
테스트 5 〉 통과 (11.86ms, 77.2MB)
테스트 6 〉 통과 (8.05ms, 83.3MB)
테스트 7 〉 통과 (9.54ms, 82.3MB)
테스트 8 〉 통과 (12.16ms, 80.3MB)
테스트 9 〉 통과 (8.92ms, 86.2MB)
테스트 10 〉 통과 (13.57ms, 87.6MB)
테스트 11 〉 통과 (8.33ms, 73.2MB)
테스트 12 〉 통과 (10.27ms, 78.4MB)
테스트 13 〉 통과 (11.64ms, 83MB)
테스트 14 〉 통과 (8.12ms, 93.2MB)
테스트 15 〉 통과 (5.50ms, 80.3MB)
테스트 16 〉 통과 (5.76ms, 78.4MB)
테스트 17 〉 통과 (5.61ms, 72.5MB)
테스트 18 〉 통과 (5.29ms, 81.8MB)
테스트 19 〉 통과 (11.08ms, 87MB)
테스트 20 〉 통과 (16.76ms, 82.8MB)
테스트 21 〉 통과 (12.05ms, 78.5MB)
테스트 22 〉 통과 (9.65ms, 80.8MB)
테스트 23 〉 통과 (8.29ms, 77.5MB)
테스트 24 〉 통과 (11.01ms, 80.9MB)
테스트 25 〉 통과 (112.32ms, 192MB)
테스트 26 〉 통과 (117.31ms, 216MB)
테스트 27 〉 통과 (136.26ms, 222MB)
테스트 28 〉 통과 (157.63ms, 204MB)
테스트 29 〉 통과 (199.21ms, 224MB)
테스트 30 〉 통과 (139.98ms, 189MB)
테스트 31 〉 통과 (130.41ms, 171MB)
테스트 32 〉 통과 (88.50ms, 170MB)
순서있는작업은 단순반복, 매핑은 병렬스트림
테스트 1 〉 통과 (38.19ms, 87.2MB)
테스트 2 〉 통과 (17.86ms, 84.9MB)
테스트 3 〉 통과 (95.37ms, 93.6MB)
테스트 4 〉 통과 (42.66ms, 77.4MB)
테스트 5 〉 통과 (16.90ms, 87.4MB)
테스트 6 〉 통과 (25.75ms, 88.4MB)
테스트 7 〉 통과 (30.85ms, 77.8MB)
테스트 8 〉 통과 (54.58ms, 96.4MB)
테스트 9 〉 통과 (20.14ms, 88MB)
테스트 10 〉 통과 (25.56ms, 88.2MB)
테스트 11 〉 통과 (21.67ms, 87.7MB)
테스트 12 〉 통과 (12.88ms, 77.4MB)
테스트 13 〉 통과 (12.38ms, 82.4MB)
테스트 14 〉 통과 (11.79ms, 92.7MB)
테스트 15 〉 통과 (8.89ms, 83.4MB)
테스트 16 〉 통과 (10.48ms, 78.5MB)
테스트 17 〉 통과 (17.38ms, 82.9MB)
테스트 18 〉 통과 (8.87ms, 75.9MB)
테스트 19 〉 통과 (25.64ms, 92.8MB)
테스트 20 〉 통과 (17.79ms, 85.1MB)
테스트 21 〉 통과 (22.16ms, 76.4MB)
테스트 22 〉 통과 (26.15ms, 91.5MB)
테스트 23 〉 통과 (11.87ms, 82.5MB)
테스트 24 〉 통과 (21.75ms, 83.6MB)
테스트 25 〉 통과 (110.15ms, 201MB)
테스트 26 〉 통과 (106.77ms, 196MB)
테스트 27 〉 통과 (111.83ms, 197MB)
테스트 28 〉 통과 (112.34ms, 207MB)
테스트 29 〉 통과 (121.89ms, 219MB)
테스트 30 〉 통과 (101.84ms, 199MB)
테스트 31 〉 통과 (106.29ms, 206MB)
테스트 32 〉 통과 (91.63ms, 172MB)
순서있는작업은 단순반복, 매핑은 일반스트림
테스트 1 〉 통과 (3.72ms, 75.3MB)
테스트 2 〉 통과 (4.46ms, 77.6MB)
테스트 3 〉 통과 (3.74ms, 73.3MB)
테스트 4 〉 통과 (3.88ms, 77MB)
테스트 5 〉 통과 (10.50ms, 92.4MB)
테스트 6 〉 통과 (7.99ms, 90.5MB)
테스트 7 〉 통과 (8.00ms, 81.9MB)
테스트 8 〉 통과 (8.21ms, 74.9MB)
테스트 9 〉 통과 (11.84ms, 86.2MB)
테스트 10 〉 통과 (10.07ms, 73.4MB)
테스트 11 〉 통과 (7.48ms, 88.5MB)
테스트 12 〉 통과 (6.36ms, 83.2MB)
테스트 13 〉 통과 (9.93ms, 77MB)
테스트 14 〉 통과 (7.83ms, 70.1MB)
테스트 15 〉 통과 (4.40ms, 68.1MB)
테스트 16 〉 통과 (3.76ms, 78MB)
테스트 17 〉 통과 (3.95ms, 81.2MB)
테스트 18 〉 통과 (4.70ms, 77.8MB)
테스트 19 〉 통과 (8.00ms, 87.4MB)
테스트 20 〉 통과 (8.69ms, 87MB)
테스트 21 〉 통과 (8.98ms, 82.4MB)
테스트 22 〉 통과 (9.05ms, 76.1MB)
테스트 23 〉 통과 (9.50ms, 80.7MB)
테스트 24 〉 통과 (8.00ms, 73.1MB)
테스트 25 〉 통과 (122.47ms, 191MB)
테스트 26 〉 통과 (146.22ms, 184MB)
테스트 27 〉 통과 (138.20ms, 176MB)
테스트 28 〉 통과 (154.00ms, 213MB)
테스트 29 〉 통과 (134.54ms, 216MB)
테스트 30 〉 통과 (122.30ms, 190MB)
테스트 31 〉 통과 (87.71ms, 201MB)
테스트 32 〉 통과 (99.51ms, 182MB)
package PRO;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Objects;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
public class PRO42888 {
public void _test() {
System.out.println(arrayCompare(solution(
new String[]{"Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"}),
new String[]{"Prodo님이 들어왔습니다.", "Ryan님이 들어왔습니다.", "Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."}));
}
public String[] solution(String[] record) {
ArrayList<UserState> users = new ArrayList<>();
for(String s : record) users.add(new UserState(s));
HashMap<String, String> lastNickName = new HashMap<>();
//users.stream().forEachOrdered(u -> { if(u.state.equals("Enter") || u.state.equals("Change")) lastNickName.put(u.id, u.nickname); });
for(UserState u : users){
if(u.state.equals("Enter") || u.state.equals("Change")){
lastNickName.put(u.id, u.nickname);
}
}
ArrayList<String> answer = (ArrayList<String>) users.stream().parallel().map(u->{
String msg = null;
if(u.state.equals("Enter")) msg = lastNickName.get(u.id)+"님이 들어왔습니다.";
else if(u.state.equals("Leave")) msg = lastNickName.get(u.id)+"님이 나갔습니다.";
return msg;
}).collect(toList());
answer.removeIf(Objects::isNull);
return answer.toArray(new String[]{});
}
private class UserState{
String state;
String id;
String nickname;
UserState(String s){
String[] split = s.split(" ");
this.state = split[0];
this.id = split[1];
if(split.length>2) this.nickname = split[2];
}
UserState(String state, String id, String nickname){
this.state = state;
this.id = id;
this.nickname = nickname;
}
}
public boolean arrayCompare(String[] a, String[] b){
if(a.length != b.length) return false;
else for(int i=0; i<a.length; i++) if(!a[i].equals(b[i])) return false;
return true;
}
}
순서있는 작업 | 순서 무관한 매핑 | 실행시간(최소/최대) |
---|---|---|
단순반복 | 단순반복 | 0.25ms / 302.72ms |
스트림 | 스트림 | 3.90ms / 132.58ms |
스트림(forEachOrdered) | 스트림 | 4.22ms / 157.63ms |
단순반복 | 스트림 | 3.72ms / 154.00ms |
단순반복 | 병렬스트림 | 16.90ms / 121.89ms |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
스트림으로 구현한 코드