본문 바로가기

전체 글

(308)
[백준] 2293번 - 동전 1 (동적 계획법) DP문제는 너무 어렵다. 이 문제를 처음 보고 knapsack 알고리즘을 사용하면 되겠다고 생각해서 cache를 2차원 배열로 만들었다. 어찌어찌하여 예제가 테스트 성공하긴 했지만 int형으로 [100][10000] 크기의 2차원 배열을 만드니 메모리제한인 4MB를 넘어서 실패했다. 1차원 배열만으로도 문제를 풀 수 있었다. for (int limit = 1; limit
23.03.03 - 람다식, R-value Reference, 이동 생성자 람다식 람다식은 함수객체를 따로 선언하지 않고 바로 생성할 수 있게 해주는 문법이다. auto iter = find_if(vecInt.begin(), vecInt.end(), [](int n)->bool { return (n % 2 != 0);}); 벡터를 순회하며 홀수인 iterator을 반환하는 코드이다. [](int iTemp = 20) {cout
[백준] 9251번 - 동적계획법 LCS int main() { cin >> A >> B; for (int a = 0; a
23.02.28 - map map 처음 선언할 때 인자로 key, value 자료형을 선언하는데 추가로 조건자를 지정할 수 있다. map m; map m2; //key를 내림차순으로 정렬 (기본 : 오름차순less) map은 연관 컨테이너고 앞 뒤 구분이 없기 때문에 push_back, pop_front같은 함수는 존재하지 않고 insert를 이용해 삽입하고 erase를 이용해 삭제한다. insert하는 여러 방법들이 있다. //1.pair pair p = {1,1}; m.insert(p); //2.pair 임시객체 m.insert(pair(2,2); //3.make_pair 함수 템플릿(권장되지 않음) m.insert(make_pair(3,3)); //명시적으로 표현하려면 make_pair로 표기해야함 //4.value_type..
23.02.24 - 반복자, 알고리즘 반복자 1.출력 반복자 2.입력 반복자 3.순방향 반복자 4.양방향 반복자 5.임의 접근 반복자 가 있다. 읽기 가능 쓰기가능 ++가능 --도 가능 +,-,[] 도 가능 보면 알겠지만 오른쪽으로 갈 수록 기능이 증가한다. 우리가 실제로 많이 사용하는 것은 대부분 양방향 반복자와 임의 접근 반복자이다. 노드 기반 컨테이너 (list,set,map)이 양방향 반복자가 사용 가능하고 배열 기반 컨테이너 (vector, deque)는 임의 접근 반복자가 사용 가능하기 때문이다. 알고리즘 일반화된 기능을 전역 네임스페이스로 선언해 제공하는 함수 템플릿 헤더이다. 대부분 첫번째, 두번째 인자로 반복자, 세번째 인자로 조건자를 넣는다. bool Greater(int a,int b) { return a > b; } t..
23.02.23 - cout, 벡터 cout cout은 객체다. 아래는 cout의 형식으로 OSTREAM클래스와 그 객체 COUT을 만들어본 것이다. namespace MyStd { class OSTREAM { public: OSTREAM& operator
[알고리즘] 동적 계획법(DP) - TIC-TAE-TOE(3목) TIC-TAE-TOE는 서양식 오목으로 이해하기 쉽게 말하면 3목이다. 가로든 세로든 대각선으로 든 돌 세 개를 먼저 잇는 사람이 승리한다. 3x3 보드에 각 플레이어의 돌을 'o'와 'x'로 두고 어떤 플레이어가 승리하는지 확인하는 코드를 볼 것이다. board = vector { {'o', 'x', 'x'}, {'.', 'o', '.'}, {'o', '.', '.'} }; for (int i = 0; i < 19683; i++) cache[i] = DEFAULT; 보드는 2차원 벡터 형태로 만들고 cache를 19683개까지 저장하게 했다. 이 오묘한 숫자의 의미는 3^9이다. 보드 한칸에 빈 경우, o의 돌이 놓여있는 경우, x의 돌이 놓여있는 경우 세가지가 있을 수 있고 총 9칸이기 때문에 3을 ..
23.02.22 - 템플릿2, STL개론 클래스 템플릿 클래스도 함수와 같이 템플릿을 가질 수 있다. template class CObj { public: CObj() {} CObj(T _x, T _y) : m_Y(_y) {} ~CObj() {} public: voidRender(); TAdd(T a, T b); private: static Tm_X; Tm_Y; }; template T CObj::m_X = 0; 클래스 템플릿의 static 멤버 변수는 맨 아래줄처럼 초기화를 해줘야 사용할 수 있다. 그러면 템플릿 클래스별로 static 멤버 변수를 공유하게 된다. template TCObj::Add(T a, T b) { m_X += a + b; return m_X; } int main() { CObjObj; Obj.Add(10, 20); cout