처음에는 전체를 1로 만들고 체육복을 도난당한 사람을 0으로 여분의 체육복이 있는 사람을 2로 한 뒤 앞의 사람을 먼저 체크하고 뒤를 체크하는 방식으로 풀려고 했는데 여분의 체육복이 있는 사람도 도난 당할 수 있다는 점을 제대로 못 봐서 틀렸다. 어떻게 하면 좋을까 생각해봤을 때 전체를 1로 만들고 여분이 있는 사람은 2로 만든 다음에 도난 당한 사람은 해당 값을 --로 빼주면 될 것 같다고 생각했다.
#include <string>
#include <vector>
#include <map>
using namespace std;
map<int, int> m1;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
for (int i = 1; i <= n; i++) {
m1[i] = 1; //전체를 1로
}
for (int i = 0; i < reserve.size(); i++) {
m1[reserve[i]] = 2; //여분이 있는 사람은 2로
}
for (int i = 0; i < lost.size(); i++) {
m1[lost[i]]--; //도난당한 사람은 개수 빼주기
}
for (int i = 1; i <= n; i++) {
if (m1[i] == 0) { //만약 도난당해서 없는 사람이 있다면
if (m1[i - 1] == 2) { //앞사람을 먼저 체크
m1[i - 1]--;
m1[i]++;
}
else if (m1[i + 1] == 2) {
m1[i + 1]--;
m1[i]++;
}
}
}
for (int i = 1; i <= n; i++) {
if (m1[i] >= 1) { //1개 이상이 있다면 수업을 들을 수 있다.
answer++;
}
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV 1][C++][PCCE 기출문제] 9번 / 이웃한 칸 (0) | 2024.03.06 |
---|---|
[프로그래머스][LV 1][C++] 완주하지 못한 선수 (0) | 2024.03.06 |
[프로그래머스][LV 1][C++] [1차] 다트 게임 (2) | 2024.03.05 |
[프로그래머스][LV 1][C++] 실패율 (0) | 2024.03.04 |
[프로그래머스][LV 1][C++] 소수 찾기 (0) | 2024.03.04 |