250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 c++)위클리 챌린지 7주차 입실 퇴실 본문
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/86048
map을 활용.
변수 설명
n = enter의 크기(사람 수)
leaveIndex = leave 벡터를 순회할 때 지금까지 순회한 인덱스를 저장.
answer = 정답 저장 벡터
m = 입실과 퇴실을 확인하는 map
cnt = 퇴실할 사람이 지금까지 반드시 만난 사람의 수
enter 벡터를 순회하면서 입실한 사람은 m에서 true로 바꿔주도록 한다.
사람 한 명이 들어올 때마다 leave를 순회하는데 currentIndex에 해당하는 사람의 번호가 m에서 true일 때에만 조건을 검사해야 한다.
(입실하지 않았는데 퇴실할 수 없으므로...)
만약 조건 검사에서 퇴실할 사람의 번호가 m에서 true일 때,
해당하는 사람은 퇴실 처리를 위해 m에서 false로 바꿔준다.
또한, cnt로 m에서 true인 사람을 카운팅한다.
(m에서 true인 사람들은 퇴실한 사람이 반드시 만난 경우이기 때문에)
마지막으로 회의실에 남아있는 사람들은 퇴실한 사람과 1번 만났기 때문에 +1을 해준다.
조건에 해당하지 않는다면 break를 통해 다음 입실하는 사람을 처리하면 된다.
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(vector<int> enter, vector<int> leave) {
int n = enter.size();
int leaveIndex = 0;
vector<int> answer(n, 0);
map<int, bool> m;
for(int i = 0; i < n; i++){
m[enter[i]] = true;
for(int j = leaveIndex; j < n; j++){
int num = leave[j];
if(m[num]){
int cnt = 0;
m[num] = false;
for(auto itr = m.begin(); itr != m.end(); itr++){
if(itr->second){
answer[itr->first - 1]++;
cnt++;
}
}
answer[num - 1] += cnt;
leaveIndex++;
} else{
break;
}
}
}
return answer;
}
728x90
반응형
'프로그래머스 알고리즘 > Weekly Challenge' 카테고리의 다른 글
(프로그래머스 c++)위클리 챌린지 12주차 (0) | 2021.10.25 |
---|---|
(프로그래머스 c++)위클리 챌린지 9주차 (0) | 2021.10.06 |
(프로그래머스 c++)위클리 챌린지 8주차 (0) | 2021.09.28 |
(프로그래머스 JS)위클리 챌린지 6주차 (0) | 2021.09.07 |
(프로그래머스 c++)위클리 챌린지 6주차 (0) | 2021.09.07 |