[プログラマーSweetチャレンジ]#86048 7週目
質問する
社会的な距離を保つために、会議室に出入りするときは名簿に名前を書きます.入室とチェックアウトを同時に行う場合はなく、入室時間とチェックアウト時間は別に記録されません.
今日の会議室は全部でn人が入室してチェックアウトしました.便利な人は1からnまでそれぞれ番号があり、2回以上会議室に入ったことがない.この時、誰もが見たことがある人がどれだけいるかを明らかにしたいと思っています.
例えば、「入室名簿」の順序は[1,3,2]、「退室名簿」の順序は[1,2,3]である.
I/O例
enterleaveresult[1,3,2][1,2,3][0,1,1][1,4,2,3][2,1,3,4][2,2,1,3][3,2,1][2,1,3][1,1,2][3,2,1][1,3,2][2,2,2][1,4,2,3][2,1,4,3][2,2,0,2]
に答える
この問題は3つのハッシュ表で解くことができる.
import java.util.HashSet;
class Solution {
public int[] solution(int[] enter, int[] leave) {
int[] answer = new int[enter.length];
HashSet<Integer> room = new HashSet<>(); //회의실 현황
int idx = 0;
for(int i=0; i<enter.length; i++) { //순서대로 입장
int l;
while(idx<leave.length && room.contains(l = leave[idx])) { //회의실에 있고 퇴실가능한사람 내보내기
idx++;
room.remove(l);
}
int e = enter[i];
for(int x : room) { //입실하면서 마주친사람 체크
answer[e-1]++;
answer[x-1]++;
}
room.add(e);
}
return answer;
}
}
Reference
この問題について([プログラマーSweetチャレンジ]#86048 7週目), 我々は、より多くの情報をここで見つけました https://velog.io/@pss407/프로그래머스-위클리-챌린지86048-7주차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol