*문제 출처는 프로그래머스에 있습니다.
문제 제목: 체육복 (1단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/42862
문제 설명
나의 풀이
#include <string>
#include <vector>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
vector<int> ex(31, 0);
for (int i : lost)
ex[i]--;
for (int j : reserve)
ex[j]++;
for (int k = 1; k <= n; k++) {
if (ex[k] == -1) {
if (ex[k - 1] == 1) {
ex[k - 1] = 0;
ex[k] = 0;
}
else if (ex[k + 1] == 1) {
ex[k + 1] = 0;
ex[k] = 0;
}
}
if (ex[k] >= 0) answer++;
}
return answer;
}
※ 알아야 할 것
일단 사람이 30명이라서 번호가 30번 이상 넘어갈 일이 없다. 그래서 ex의 원소를 31까지만 만들었다.
이 문제에서 사용한 알고리즘은 체육복을 도난 당한 애들이 다른 애들한테 체육복을 빌리는 사람이 많아야한다.
그래서 체육복을 도난 당한 사람을 -1로 잡아서 1인 사람한테 체육복을 받으면서 원소를 하나씩 확인 해나가면 쉽게 풀 수 있다.
'코딩테스트(프로그래머스 & 백준) > 프로그래머스-C++' 카테고리의 다른 글
Programmers / H-Index / C++ (0) | 2024.02.26 |
---|---|
Programmers / n^2 배열 자르기 / C++ (0) | 2024.02.23 |
Programmers / 할인 행사 / C++ (0) | 2024.02.21 |
Programmers / 괄호 회전하기 / C++ (0) | 2024.02.20 |
Programmers / 연속 부분 수열 합의 개수 / C++ (0) | 2024.02.19 |