성공 코드(내 코드) 선택해야 하는 폰켓몬의 마리 수 = nums의 사이즈/2 위의 값을 미리 저장해두고 폰켓몬의 종류 번호가 담긴 1차원 배열 nums의 중복 원소를 제거한다. unique는 연속된 중복 원소를 vector의 제일 뒷부분으로 쓰레기값으로 보낸다. 따라서 sort 함수로 vector를 정렬한 뒤 unique 해줘야 한다. unique시 반환 되는 값은 vector의 쓰레기값의 첫번째 위치이다. 이를 이용하여 unique 후 erase가 가능하다. nums에는 폰켓몬의 종류만 남게 된다. 구하고자 하는 것은 다음과 같다. 가장 많은 종류의 폰켓몬을 선택하는 방법에서 폰켓몬 종류 번호의 개수 선택해야 하는 폰켓몬의 마리 수 >= 폰켓몬의 종류 폰켓몬의 종류 선택해야 하는 폰켓몬의 마리 수 <..
성공 코드(내 코드) 참여자 집합과 완주자 집합이 있을 때, 두 집합의 차집합을 구하면 완주하지 못한 선수를 구할 수 있다. 차집합을 set_difference 함수를 이용하여 구하기 전 sort 함수로 정렬이 먼저 이루어져야 한다. 미완주자 = 참여자 - 완주자 #include #include #include using namespace std; string solution(vector participant, vector completion) { string answer = ""; vector sub(1); sort(participant.begin(), participant.end()); sort(completion.begin(), completion.end()); set_difference(parti..
성공 코드(내 코드) #include #include #include using namespace std; int solution(int n, vector lost, vector reserve) { int answer = 0; answer=n-lost.size(); // lost와 reserve를 오름차순으로 정렬하기 sort(lost.begin(), lost.end()); sort(reserve.begin(), reserve.end()); for(int i=0; i
알고리즘 다이나믹 프로그래밍 풀이 계단 별 점수를 저장하는 벡터 s와 계단 점수의 최대값을 저장하는 벡터 dy를 사용하였다. s[i] = i층 계단의 점수, dy[i] = i층 계단까지의 최대값 dy[1]=s[1] dy[2]=s[1]+s[2] dy[3]=s[3]+(s[1]과 s[2] 중 큰 값) dy[i]=s[i]+(dy[i-2]와 dy[i-3]+s[i-1] 중 큰 값) (n>3) s[i]+dy[i-2] (i 계단의 점수) + (i - 2 계단까지 가는 최대값) s[i]+dy[i-3]+s[i-1] (i 계단의 점수) + (i - 3계단까지 가는 최대값) + (i - 1 계단의 점수) 성공 코드 #include using namespace std; int main() { // freopen("input.t..
알고리즘 다이나믹 프로그래밍 풀이 h 2차원 벡터를 두어 똑같은 색이 이웃하지 않도록 h[i-1]의 값 중 최소 값을 이용하여 값을 누적해간다. 즉, h[i][1]은 i번째 집을 빨간색으로 칠할 때의 최소 비용, h[i][2]은 i번째 집을 초록색으로 칠할 때의 최소 비용, h[i][1]은 i번째 집을 파란색으로 칠할 때의 최소 비용이 된다. 그러면 h[n][1], h[n][2], h[n][3] 중 최소값이 답이 된다. 성공 코드 #include using namespace std; int main() { // freopen("input.txt", "rt", stdin); ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, r,..