본문 바로가기

C++

(13)
(C++) - Split 함수 사용하기 Python, javascript 등 다양한 언어에서는 split함수를 지원하지만 c++에는 기본으로 split함수가 내장되어 있지 않습니다. 따라서 여기에 문자열 파싱에 있어 자주 사용하는 split함수의 예제를 정리합니다. Header #include string과 stream이 합쳐진 sstream을 이용하기 위해 선언해줘야하는 헤더입니다. Code stringstream 객체는 str() 함수 또는 (istream : 추출연산자)를 사용하거나 eof를 이용, getline함수를 이용하는 방법이 있습니다. #include #include using namespace std; int main(){ stringstream ss; string n; ss.str("Hello beautiful world i..
(C++) - Tuple 자료구조 Tuple 기존 pair가 두 개의 자료만 담을 수 있다면 tuple은 pair의 확장으로 두 개를 초과하여 한번에 담을 수 있는 자료구조입니다. Header #include 내장함수 make_tuple : 튜플 생성 함수 get : 튜플로부터 값 하나를 가져오는 함수 swap : 연산자 튜플의 값을 다른 변수에 전달하는 함수 tie : 한번에 tie안에 있는 인수들을 tuple로부터 차례대로 담을 수 있는 함수 Code #include #include using namespace std; int main(){ tuple t; long long a; int b; double c; char d; t = make_tuple(123'456'789'123'456'789, 123456721, 2.0, 'A'); ..
(C++) - cout,cin 실행 속도 높이기(시간초과 해결법) 🍳머리말 문제를 푸실 때 printf, scanf를 사용했을 때 A/C를 받았지만 cout, cin을 사용했을 때 시간초과가 나는 경우가 있습니다. 이에 대한 이유와 해결방법을 설명한 글입니다. 📕 왜? 이는 cout, cin이 printf, scanf보다 실행 속도가 느리기 때문에 발생합니다. 평소에는 시간 차이가 별로 없지만 입력이나 출력이 몇 십만 정도로 많아지면 시간이 크게 차이나게 됩니다. 따라서 이 부분을 유의하여 코드를 작성하려면 cout, cin 대신 printf, scanf를 사용하시는 것을 권장하지만 cout, cin을 계속 사용하고 싶은 분들이라면 꼭 아래 방법을 이용하시는 것을 권장합니다. 아래 코드는 cout, cin의 성능을 printf, scanf만큼 빠르게 만들어주는 역할을 ..
(C++) - KMP 알고리즘 문제링크 https://www.acmicpc.net/problem/1786 1786번: 찾기 첫째 줄에, T 중간에 P가 몇 번 나타나는지를 나타내는 음이 아닌 정수를 출력한다. 둘째 줄에는 P가 나타나는 위치를 차례대로 공백으로 구분해 출력한다. 예컨대, T의 i~i+m-1번 문자와 P의 1~m www.acmicpc.net KMP문제입니다 아래 소스코드는 KMP설명을 위해 저 문제의 답을 예시로 적었습니다. p는 찾으려는 문자열 s는 주어지는 문자열 KMP Algorithm 1. 시간 복잡도 O(n+m) - > pi배열을 만드는 시간 m(원하는 문자열의 길이), 주어진 문자열에서 원하는 문자열 찾는 시간 n 2. Preprocessing - > pi배열 만들기 : 찾길 원하는 문자열은 p,주어진 문자열..
(C++) - 비주얼 스투디오 코드(visual studio code) 빌드 해보기 1. 우선 비주얼 스투디오가 설치가 되어있는지 확인해야 합니다. 1)설치가 안되어 있을 경우 : 이곳에서 빌드를 위한 프로그램을 다운 받을 수 있습니다.2)설치가 되어 있을 경우: window이시면 비주얼 스투디오 코드 화면 상단에 view 또는 보기를 누르신뒤 extension 또는 확장을 클릭하시면 확장파일을 다운 받을 수 있는 검색창이 나오는데 거기에 install cpp tools라고 검색하시면 다운받으실 수 있습니다.
(C++) - memset() : 배열 초기화 함수 사용법 먼저 라이브러리 추가를 해줘야 합니다. 1#include // 또는 #include cs memset(*void 초기화 하고싶은 배열, 원하는 초기화 값, 초기화 하고 싶은 바이트의 바이트 개수), memset의 마지막 부분을 조심하셔야 합니다. 배열의 개수가 아니고 바이트의 개수 입니다 따라서 a라는 일차원(10개의 방) 배열을 0으로 초기화하기 위해서는 아래와 같이 사용하시면 됩니다. 1memset(a,0,sizeof(a));cs 2차원 배열 초기화 - > 각 행에 대해 일차원으로 초기화 해주시면 됩니다.
O(n)시간 복잡도 대체로 O(n)의 시간 복잡도를 가지고 있을 때 n이 반복분 수행 횟수라 하면 1억번 이상일때 1초를 넘을 수 있습니다. 1. O(n^2)일 때는 n이 10만을 넘는다면 1초를 넘길 수 있고 2. O(n^3)일 때는 n이 1000의 제한이며 3. O(n^4)일 때는 n이 500을 넘을 수 없습니다. 따라서 알고리즘을 code로 짤 때 대체로 n * O(logn)인 것을 사용하시는 것이 더 효율적입니다.
(C++) - 최대공약수 구하기-유클리드 호제법 유클리드 호제법(- 互除法, Euclidean algorithm)은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다. 이를 이용해 C++로 최대공약수와 최소공배수를 구하는 프로그램을 작성한다. #include using namespace std; in..