본문 바로가기

C++ STL, 알고리즘29

c++ lower_bound upper_bound 출처 : https://chanhuiseok.github.io/posts/algo-55/ 알고리즘 - c++ lower_bound, upper_bound 활용하기 컴퓨터/IT/알고리즘 정리 블로그 chanhuiseok.github.io 정리가 잘 되어있는 글을 요약하자면, lower_bound : 찾으려는 key 값보다 같거나 큰 숫자가 배열 몇 번째에서 처음 등장하는지 찾기 위함 #include #include using namespace std; int main() { int arr[6] = { 1,2,3,4,5,6 }; cout 2023. 10. 13.
float vs double c++ 부동소수점 문제 코딩 테스트 문제를 풀던 중 나누기 연산을 해야하는 문제가 있었다. 나누기 연산 후 소수점 아래 N자리 까지 반올림 연산을 해야하기 때문에 float를 사용하여 문제를 해결하고자 하였다. 하지만 예시를 모두 맞췄지만 문제를 해결할 수 없는 상황이 일어나 여러 고민과 주변인에게 조언을 구한 결과 실수의 자료형에 문제가 있다는 것을 알게 되었다. 먼저 float는 6자리까지 표현이 가능한 실수 자료형이다. 또한 double은 15자리까지 표현이 가능한 실수 자료형이다. 이러한 차이는 정수 부분이 긴 실수 인 경우 문제가 발생할 수 있다. 123456789.123을 두 자료형에 넣는 경우 float의 경우 123456792.000000이라는 값이 담아지고, double의 경우 123456789.123000이 .. 2023. 10. 12.
C++ 입출력 가속 코드 백준 문제를 풀다보면, c++로 코딩하였을때 알고리즘이 크게 문제가 없다고 느낄때가 종종 있으나, 시간초과로 인해서 문제가 틀리는 경우가 종종 발생하는 것 같다. 그럴때마다 사용하는 코드가 있는데, main함수 안에 다음과 같은 코드를 넣어주면 신기하게도 입출력 가속이 일어나서 합격한다. ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 그 이유가 늘 궁금했다. 아래 이유가 담긴 포스팅을 복사해왔다. 멀티스레딩과, printf, scanf 를 사용하지 않는 선에서 가속 코드를 적절히 추가해서 사용하는 것이 도움이 될 것 같다. ios::sync_with_stdio(false); stdio.h는 C에서 printf, scanf를 사용할 수 .. 2023. 10. 6.
[STL] vector unique 함수 vector 배열에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수이다. algorithm이라는 헤더에 존재하는 함수이다. unique함수를 사용하면 중복 없는 요소를 채운 후 남은 요소는 원래 배열의 요소를 그대로 넣는다. 즉, 중복되지 않는 원소들을 앞에서부터 채워나가는 역할을 하기때문에 남은 뒷부분은 그대로 vector 원소값이 존재한다. 또한 unique 함수가 끝나면 중복이 없는 요소의 끝 점을 반환한다. 중복을 완전히 제거하지 못하는 문제를 해결하기 위해 erase 함수를 사용해서 남은 뒷부분을 제거야한다. erase 함수는 vector 배열에서 특정 원소를 삭제하는 함수이다. v.erase(v.begin(), v.end()) 명령어를 입력하면 처음부터 끝까지 배열 내 모든 원소가 제거된다.. 2023. 10. 5.