2019 KAKAO BLIND RECRUITMENTオープンチャットルーム
12143 ワード
問題を理解する
N文字列が与えられます.
したがって、文字列は3つの方法で入力されます.
1.Enter+アイデンティティ+名前
2.Leave+Id
3.変更+アイデンティティ+名前
Enterフレーズが入力されている場合は「{名前}」、{名前}、Leaveフレーズが入力されている場合は「{名前}」です.出力が必要です.
Changeフレーズが入力されている場合は、IDに格納されているすべての名前を変更する必要があります.EnterまたはLeaveフレーズが事前に入力されている場合は、その文の名前も変更する必要があります.
また、同じidを持つEnter文を2回以上入力すると、入力したすべての文が出力されますが、名前は最後に入力したEnter文にすべて変更する必要があります.
最終出力の構文を返します
問題を解く
問題は理解しにくいので、問題をよく理解すれば簡単です.
Enter文がN回繰り返される場合は最後の名前に置き換え、IDに対応する名前をChangeで変更する場合はそのID Enterで保留中の出力文の名前を変更すればよい.
すなわち,IDは変わらないが名前は変化しており,自然にMap資料構造を使えばよい.
Key値をID,mapとして指定します.各Change文およびEnter文にput({id},{name})を使用すると、idが存在する場合は名前が変更され、存在しない場合は新しいidが追加されます.
(IDはないが変更されないという制約があるので、この方法で問題ありません)
したがって、「外出中」のように文を作成するのではなく、「外出中」のように文を作成してからマッピングします.get({id})によって最終的にそのidの値として保存された名前値をインポートして文を生成すればよい
コード#コード# import java.util.*;
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
Map<String, String> id = new HashMap<>();
Queue<String> queue = new LinkedList<>();
for(int i =0;i<record.length;i++){
String[] str = record[i].split(" ");
if(str.length==3){
// Enter구문이나 Change구문
// Map에 ID와 대응하는 이름을 넣어준다.
id.put(str[1], str[2]);
if(!str[0].equals("Change")){
/*
Change일 경우 문구가 출력되지 않는다.
Queue는 최종적으로 출력될 문구에 관련된 자료구조이므로,
Change일 때는 이 메서드가 수행되서는 안된다
*/
queue.add(str[1]);
queue.add(str[0]);
}
}
else{
queue.add(str[1]);
queue.add(str[0]);
}
// queue에 저장된 str[1] : ID, str[0] : Enter나 Leave
}
ArrayList<String> sb = new ArrayList<>();
while(!queue.isEmpty()){
String who = queue.poll();
// ID값이 Pop된다(str[1], 즉 ID값을 먼저 넣었으므로 FIFO 구조에
// 의해 ID 값이 먼저 반환된다)
String in = queue.poll();
// 해당 ID값이 수행하는 행동(Enter나 Leave)가 출력될 것이다
if(in.equals("Enter")){
// Enter Case
// Map에서 id에 대응하는 이름을 꺼내온 뒤 들어왔습니다 문구에 추가
sb.add(id.get(who)+"님이 들어왔습니다.");
}
else{
// Leave Case
sb.add(id.get(who)+"님이 나갔습니다.");
}
}
return sb.toArray(new String[sb.size()]);
}
}
結果
Reference
この問題について(2019 KAKAO BLIND RECRUITMENTオープンチャットルーム), 我々は、より多くの情報をここで見つけました
https://velog.io/@idj7183/2019-KAKAO-BLIND-RECRUITMENT-오픈채팅
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
問題は理解しにくいので、問題をよく理解すれば簡単です.
Enter文がN回繰り返される場合は最後の名前に置き換え、IDに対応する名前をChangeで変更する場合はそのID Enterで保留中の出力文の名前を変更すればよい.
すなわち,IDは変わらないが名前は変化しており,自然にMap資料構造を使えばよい.
Key値をID,mapとして指定します.各Change文およびEnter文にput({id},{name})を使用すると、idが存在する場合は名前が変更され、存在しない場合は新しいidが追加されます.
(IDはないが変更されないという制約があるので、この方法で問題ありません)
したがって、「外出中」のように文を作成するのではなく、「外出中」のように文を作成してからマッピングします.get({id})によって最終的にそのidの値として保存された名前値をインポートして文を生成すればよい
コード#コード# import java.util.*;
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
Map<String, String> id = new HashMap<>();
Queue<String> queue = new LinkedList<>();
for(int i =0;i<record.length;i++){
String[] str = record[i].split(" ");
if(str.length==3){
// Enter구문이나 Change구문
// Map에 ID와 대응하는 이름을 넣어준다.
id.put(str[1], str[2]);
if(!str[0].equals("Change")){
/*
Change일 경우 문구가 출력되지 않는다.
Queue는 최종적으로 출력될 문구에 관련된 자료구조이므로,
Change일 때는 이 메서드가 수행되서는 안된다
*/
queue.add(str[1]);
queue.add(str[0]);
}
}
else{
queue.add(str[1]);
queue.add(str[0]);
}
// queue에 저장된 str[1] : ID, str[0] : Enter나 Leave
}
ArrayList<String> sb = new ArrayList<>();
while(!queue.isEmpty()){
String who = queue.poll();
// ID값이 Pop된다(str[1], 즉 ID값을 먼저 넣었으므로 FIFO 구조에
// 의해 ID 값이 먼저 반환된다)
String in = queue.poll();
// 해당 ID값이 수행하는 행동(Enter나 Leave)가 출력될 것이다
if(in.equals("Enter")){
// Enter Case
// Map에서 id에 대응하는 이름을 꺼내온 뒤 들어왔습니다 문구에 추가
sb.add(id.get(who)+"님이 들어왔습니다.");
}
else{
// Leave Case
sb.add(id.get(who)+"님이 나갔습니다.");
}
}
return sb.toArray(new String[sb.size()]);
}
}
結果
Reference
この問題について(2019 KAKAO BLIND RECRUITMENTオープンチャットルーム), 我々は、より多くの情報をここで見つけました
https://velog.io/@idj7183/2019-KAKAO-BLIND-RECRUITMENT-오픈채팅
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.util.*;
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
Map<String, String> id = new HashMap<>();
Queue<String> queue = new LinkedList<>();
for(int i =0;i<record.length;i++){
String[] str = record[i].split(" ");
if(str.length==3){
// Enter구문이나 Change구문
// Map에 ID와 대응하는 이름을 넣어준다.
id.put(str[1], str[2]);
if(!str[0].equals("Change")){
/*
Change일 경우 문구가 출력되지 않는다.
Queue는 최종적으로 출력될 문구에 관련된 자료구조이므로,
Change일 때는 이 메서드가 수행되서는 안된다
*/
queue.add(str[1]);
queue.add(str[0]);
}
}
else{
queue.add(str[1]);
queue.add(str[0]);
}
// queue에 저장된 str[1] : ID, str[0] : Enter나 Leave
}
ArrayList<String> sb = new ArrayList<>();
while(!queue.isEmpty()){
String who = queue.poll();
// ID값이 Pop된다(str[1], 즉 ID값을 먼저 넣었으므로 FIFO 구조에
// 의해 ID 값이 먼저 반환된다)
String in = queue.poll();
// 해당 ID값이 수행하는 행동(Enter나 Leave)가 출력될 것이다
if(in.equals("Enter")){
// Enter Case
// Map에서 id에 대응하는 이름을 꺼내온 뒤 들어왔습니다 문구에 추가
sb.add(id.get(who)+"님이 들어왔습니다.");
}
else{
// Leave Case
sb.add(id.get(who)+"님이 나갔습니다.");
}
}
return sb.toArray(new String[sb.size()]);
}
}
Reference
この問題について(2019 KAKAO BLIND RECRUITMENTオープンチャットルーム), 我々は、より多くの情報をここで見つけました https://velog.io/@idj7183/2019-KAKAO-BLIND-RECRUITMENT-오픈채팅テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol