일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다이나믹프로그래밍
- 알고리즘
- 자료구조
- 병행성 관련 오류
- 영속성
- directx
- DirectX 12
- 멀티쓰레드
- 그리디알고리즘
- I/O장치
- Direct12
- 락
- 멀티프로세서
- 쓰레드
- codility
- 동적계획법
- 파일시스템 구현
- 백준
- 운영체제
- 컨디션 변수
- OS
- DirectX12
- 스케줄링
- 병행성
- 타입 객체
- 그리디 알고리즘
- 다이나믹 프로그래밍
- 프로그래머스
- 렌더링 파이프라인
- 디자인패턴
Archives
- Today
- Total
기록공간
체육복 (프로그래머스) 본문
반응형
부분 단계적으로 해결하는 그리디 알고리즘 문제였다.
여벌 체육복을 가져온 학생이 도난 당할 수 있다는 점에 주목하자. 이 경우에는 여벌 체육복을 가져왔다고 해도 다른 학생에게 체육복을 빌려줄 수 없다.
접근 방법은 다음과 같다.
-
도난 당한 학생을 담은 벡터에서 여벌 체육복을 가져온 학생들을 뺀다. (도난 당했지만 체육 수업을 들을 수 있으므로)
-
마찬가지로 잃어버린 학생을 담은 벡터에서 위 학생을 뺀다.
-
남은 잃어버린 학생들은 체육 수업을 들을 수 없으므로, 이 학생들 앞뒤로 여벌의 체육복이 있는 학생이 존재하는지 검사한다.
-
만약 있다면 여벌을 가진 학생은 이제 체육복을 빌려줬으므로 벡터에서 빼준다.
-
답은 (학생 수) - (잃어버린 학생 수) + (잃어버렸지만 여벌이 있는 학생 수) + (빌려준 수) 가 된다.
코드는 다음과 같다.
#include <string>
#include <vector>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
answer = n - lost.size();
for(auto iter_lost = lost.begin(); iter_lost != lost.end();)
{
bool checkErase = false;
for(auto iter_reserve = reserve.begin(); iter_reserve != reserve.end();)
{
// 여벌이 있지만 잃어버렸으므로 원소를 빼준다.
if((*iter_lost) == (*iter_reserve))
{
iter_reserve = reserve.erase(iter_reserve);
checkErase = true;
++answer;
break;
}
++iter_reserve;
}
// 마찬가지로 잃어버렸지만 여벌이 있으므로 원소를 빼준다.
if(checkErase)
iter_lost = lost.erase(iter_lost);
else
++iter_lost;
}
// 잃어버려서 체육수업을 들을 수 없는 학생들중
for(const auto student_lost : lost)
{
for(auto iter_reserve = reserve.begin(); iter_reserve != reserve.end();)
{
// 앞, 뒤로 빌려줄 학생이 있으므로 빌려준다.
if(student_lost - 1 == (*iter_reserve) || student_lost + 1 == (*iter_reserve))
{
iter_reserve = reserve.erase(iter_reserve);
++answer;
break;
}
++iter_reserve;
}
}
return answer;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
단속카메라 (프로그래머스) (0) | 2020.06.18 |
---|---|
조이스틱 (프로그래머스) (0) | 2020.06.16 |
다음 큰 숫자 (프로그래머스) (0) | 2020.06.12 |
올바른 괄호 (프로그래머스) (0) | 2020.06.12 |
카펫 (프로그래머스) (0) | 2020.06.12 |
Comments