본문 바로가기

Programming

(10)
c++ 10진법 진법 변환(string) 실무에서는 쓸 일이 없지만, 알고리즘 대회나 심심풀이 용으로 적합한 진법 변환. 기억 상기를 위해 예시 2개만 작성. 2진법 #include #include #include string BinarySystem(int num){ string make_base = ""; for(int i = num; i > 0; ){ make_base = to_string(i % 2) + make_base; i /= 2; } return make_base; } int main(){ //생략 return 0; } 3진법 #include #include #include string TernarySystem(int num){ string make_base = ""; for(int i = num; i > 0; ){ make_bas..
C++ and 비트연산을 이용한 홀수, 짝수 판별 일반적으로 홀수, 짝수를 구한다고 하면 조건문을 사용해서 나머지를 확인할 것이다. #include int main(){ int test = 1234; if(test % 2 == 0){ std::cout
C++ 입출력 속도 증가(알고리즘 대회) 일반적으로 std::cin 과 std::cout 의 속도가 C언어의 scanf(), printf()보다 느리다는 것은 모두가 알고 있는 사실이다. 다만 C언어로 이용하든, C++로 이용하든 scanf()와 printf()함수는 잘 사용하지 않는 다는 것이다. 여러 이유가 있지만, 가장 큰 이유들은 보안상의 이유거나, 문자열을 다루는데 불편함이 많아 잘 사용하지 않는다. 그래서 std::cin과 std::cout 사용을 포기하지 않고, 입출력 속도를 높일 방법을 정리한다. (단, 이 방법도 Race Condition이 발생할 수 있으므로, Test용도나 알고리즘 대회 등 실무와는 관계가 없는 상황에서 사용하는 것을 권한다.) 추가적으로 빠른 입출력에 대해서 알고 싶다면, c++ fast i/o로 검색하면 ..
C++ max_element(), min_element() 최대값, 최소값 array, list, vector 등의 객체 에서 최대값, 최소값을 구하는 일이 생각 보다 많다. 다만 최대값, 최소값을 구하기 위해서 코드를 얼마나 작성하느냐의 차이가 있다. C++에서는 이 기능을 #include 에서 제공한다. max_element()나 min_element()는 둘다 모든 요소에 접근을 해야 하기 때문에, 모든 STL 컨테이너에 대해서 선형으로 동작한다. 즉 시간 복잡도가 O(n)이다. template ForwardIterator max_element (ForwardIterator first, ForwardIterator last); template ForwardIterator max_element (ForwardIterator first, ForwardIterator last,..
python libcst 사용법 - CST, AST, 컴파일러, 인터프리터 python에서는 ast 모듈을 기본적으로 제공한다. AST(Abstract Syntax Tree)와 CST(는 주로 컴파일러(Compiler) 및 구문 분석기(paser)에서 사용되는 용어이다. CST는 문법을 tree 형식으로 바꾼 것이고, 이를 축약해서 데이터 구조로 표현한 것이 AST이다. 그러다 보니 AST는 손실이 발생하기 때문에, 원래의 소스코드를 얻을 수가 없다. CST의 경우 python에서 2to3, lib2to3, black등을 사용하는데, 최근 인터넷을 찾아보면서 libcst를 사용한 문제를 발견했다. python으로 짜여진 .py파일에 대해서 libcst를 사용하면, 소스코드에 대해서 tree형식으로 변환시킨다. 아래의 경우 import math를 tree형식으로 표현한 것이다. ..
프로그래밍 경험 및 객체지향 기술 능력에 대하여 보호되어 있는 글입니다.
C++ string find를 이용한 찾은 문자열 위치 저장 C++ string 객체가 사용할 수 있는 멤버함수 find의 기본형 size_t find (const string& str, size_t pos = 0); size_t find (const char* s, size_t pos = 0); 즉 find의 return 값은 size_t이다. size_t타입은 C99표준에 정의되어 있는데, 객체나 값이 포함할 수 있는 최대의 크기를 표현하는 타입이다. size_t타입은 unsigned형이다. 따라서 int형이나 unsigned int형으로 타입캐스팅으로 사용하는 방법도 가능하다. (이를 모르더라도 컴파일러가 알아서 캐스팅해준다) 문자열에서 원하는 문자열을 찾으면, 해당 문자열의 시작 위치를 저장하고, 출력해주는 예제 코드이다. #include #include ..
C++ vector<vector<int> > 2차원 벡터의 크기 C++ STL Sequence container의 vector는 동적배열이라고 볼 수 있다. 배열이기에 마치 2차원 배열처럼 vector도 2차원으로 설계가 가능하다. 2차원 배열을 사용하면 필연적으로 계산해야 하는 부분이 생기는데, 바로 row와 column의 크기를 측정하는 것이다. 함수의 parameters로 2차원배열을 넘기는 경우가 있기 때문에, row와 column의 count를 구하는 것은 중요하다고 볼 수 있다. 하지만 C언어 등에서 일반적인 2차원 배열의 크기를 구하는 방식으로 하면 정상적인 크기가 구해지지 않는다. 즉 sizeof()를 사용해도 정상적인 크기가 구해지지 않는다. 구하는 방법은 단순하다. vector의 멤버함수인 .size()를 이용하여 행과 열을 구할 수 있다. vect..