우선 정렬 알고리즘에 관한 문제이고 문제는 아래와 같다. 우선 문제를 간단하게 분석해보자면, numbers의 길이가 100,000이기 때문에 단순히 for문을 사용하거나 문자열로 나타내기 위해 단순히 문자열의 순열 (next_permutation) 방식으로는 시간 초과가 날 것이라 생각했다. 100,000의 길이면 nlogn 시간 복잡도를 가진 정렬을 상한선으로 택해야 하는데, C++에서 의 sort() 함수의 시간 복잡도가 nlogn이기 때문에 해당 sort() 함수를 잘 이용해보면 될 것이라 생각했다. sort 함수를 기존 정렬 방식이 아닌 주어진 문제에 맞는 정렬 방식을 사용하고 싶다면 sort 의 3번째 파라미터에 정렬 조건에 대한 비교 함수를 넣으면 자신이 원하는 정렬을 수행 가능하기 때문에 n..
우선 그리디 알고리즘 문제이다.문제는 아래와 같다. 문제에서 보트에 최대 2명씩 밖에 탈 수 없다는 조건이 있기 때문에 나는 투포인터 알고리즘을 사용해서 문제를 풀고자 했다. 투포인터 알고리즘이란, 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘이다.즉 포인터를 두개로 설정하면 된다.!풀이 코드#include #include #include #include using namespace std;int solution(vector people, int limit) { int answer = 0; sort(people.begin(), people.end()); // 오름차순 정렬부터 해주기 int tmp = 0; int f_idx = 0; //..
오랜만에 알고리즘 문제를 풀다가, 현대 소프티어 챌린지 문제였는데, 학생들 성적의 구간 평균을 구하는 문제였고 소수점 둘째 자리까지 반올림을 해서 출력을 하도록 하는 문제였다.반올림을 하는 방법은 원래 알고 있어서 아래와 같이#include #include using namespace std;int main(){ double a = 10.456; cout 이렇게 하면 기본적으로 소수점 첫번째를 기준으로 반올림을 해서 결과는 10이 나오게 된다.만약 소수점 첫번째 자리까지 보이고 싶다면 아래와 같은 방법으로 하면 된다.#include #include using namespace std;int main() { double a = 10.456; cout 이렇게 하면 10이 아닌 10.5가 출력이 된다...