Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- stl
- 애셋로드
- 언리얼가비지컬렉터
- 프로그래머스
- 정렬
- enumasByue
- 크리티컬섹션
- 알고리즘
- 언리얼엔진구조체
- 람다사용정렬
- 강참조
- map
- UELOG
- moreeffectiveC++
- BFS
- 데이터애셋
- C++최적화
- 약참조
- UE4 커스텀로그
- UE_LOG
- 스마트포인터
- UML관련
- dataasset
- C++
- 람다
- 정렬알고리즘
- 델리게이트
- unorder_map
- 선택정렬
- 자료구조
Archives
- Today
- Total
기억을 위한 기록들
[프로그래머스 lv 2 ] - 구명보트 (C++) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42885
풀이 : 우선 오름차이 정렬을 한뒤 좀 헤매긴했다 순차적으로 i +( i+1 ) 식으로 처음에 계산했다가 왜 안되는지 반례를 찾아 본뒤에야 해결 했다.
예를 들어,
people = [10, 20, 30, 40, 50, 60, 70, 80, 90]
limit = 100
이 같은 경우 처음에 생각 했던 방식으로는 10,20 / 30,40 / 50 / 60 / 70 / 80 / 90 으로하면 답이 7이 나오는데 제일 큰수와 제일 작은수를 더하는 식으로 하면 10,90 / 20,80 / 30,70 / 40,60 / 50으로 되어 5 라는 값이 나와서 7보다 더 효율적으로 탑승 해줄 수가 있다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> people, int limit) {
int answer = 0;
int front = 0;
int back = people.size()-1;
sort(people.begin(),people.end());
int i=0;
while(front <= back)
{
if(people[front] + people[back] <= limit)
{
front++;
back--;
}else
{
back--;
}
answer++;
}
return answer;
}
'Coding Test - cpp > Greedy' 카테고리의 다른 글
[프로그래머스 lv 1 ] - 모의고사 (0) | 2021.04.22 |
---|---|
[백준 1946: 신입 사원] - C++ (0) | 2021.04.12 |
[백준 10162: 전자레인지] - C++ (0) | 2021.03.25 |
[백준 1449: 수리공 항승] - C++ (0) | 2021.03.16 |
[백준 1541: 잃어버린 괄호] - C++ (0) | 2021.03.05 |