728x90
위클리 챌린지 7주차 : 입실 퇴실
https://programmers.co.kr/learn/courses/30/lessons/86048?language=cpp#
코드
//프로그래머스 7주차 입실 퇴실
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> enter, vector<int> leave) {
vector<int> answer(enter.size() + 1);
vector<int> inout;
int leave_i = 0;
int enter_i = 0;
while (enter_i != enter.size()) {
//퇴실
if (find(inout.begin(), inout.end(), leave[leave_i]) != inout.end()) {
inout.erase(find(inout.begin(), inout.end(), leave[leave_i])); //퇴실
leave_i++;
}
//입실
else {
for (int i = 0; i < inout.size(); i++) {
answer[inout[i]] += 1; //만난 사람 증가
}
answer[enter[enter_i]] += inout.size();
inout.push_back(enter[enter_i]); //입실
enter_i++;
}
}
//113223
answer.erase(answer.begin());
return answer;
}
int main() {
vector<int> enter = { 1,3,2 };
vector<int> leave = { 1,2,3 };
solution(enter, leave);
return 0;
}
설명
- inout 벡터에 회의실에 누가 있는지 기록한다.
- 입실 순서와 퇴실 순서만 적혀있고 시각은 따로 적혀있지 않다. 무조건 입실을 하여야 퇴실을 할 수 있다.
- 따라서 퇴실 순서대로 퇴실을 하는데 퇴실할 사람이 입실하지 않았다면 입실 순서대로 입실한다.
- 만약 입출력 예#1에서 1번이 퇴실할 순서인데 퇴실할 1번이 존재하지 않으므로 입실 순서인 1번이 입실한다.
- 1번이 입실하면 1번이 퇴실할 수 있다.
- 입실할 때는 벡터에 push하고 퇴실할 때는 벡터를 erase한다.
- 입실할 때 방에 있는 사람들은 무조건 만나므로 answer에 사람들 수 - 1(본인 제외)만큼 저장해주고 이미 방에 있던 사람들은 +1하여 만난사람을 증가시켜준다.
- 모두 입실을 완료했을 때까지 반복한다.
고찰
걸린시간 : 2시간
집중력을 잃어서 2시간이나 걸렸다....
구현하고보니 어렵지 않은 문제였는데.. 어렵게 생각해서 처음 풀었을 때 시간초과가 나왔다. 문제풀 때 더 집중해서 풀어야할 거 같다..
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
알고리즘(C++) / 프로그래머스 level 2 : 소수 찾기 (0) | 2021.09.16 |
---|---|
알고리즘(C++) / 프로그래머스 level 1 : 제일 작은 수 제거하기 (0) | 2021.09.15 |
알고리즘(C++) / 프로그래머스 위클리 챌린지 6주차 : 복서 정렬하기 (0) | 2021.09.14 |
알고리즘(C++) / 프로그래머스 level 3 : 불량 사용자 (0) | 2021.09.10 |
알고리즘(C++) / 프로그래머스 level 3 : 자물쇠와 열쇠 (0) | 2021.09.07 |
댓글