본문 바로가기

C,C++11

[C++] std::list 에서 std::advance / 백준 1406번 에디터 https://www.acmicpc.net/problem/1406 1406번: 에디터 문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가 www.acmicpc.net 백준 1406번 에디터 문제를 풀면서 배열보단 삽입삭제가 O(1)인 리스트를 사용하는게 나을거같아 std::list를 사용했다. 그런데 시간.. 2019. 12. 21.
[C++] 익명 네임스페이스, anonymous(unnamed) namespace namespace A { int a; } 이 namespace의 이름은 A 이다. 그렇다면 이건 어떤가? namespace { int a; } 이 namespace는 이름이 없다. 이런 네임스페이스를 익명 네임스페이스 ( anonymous namespace ) 다. 그렇다면 이건 어떻게 동작할까? 익명 네임스페이스는 자신이 위치한 파일 내에서만 존재한다. some_header.h 에 namespace { int a; } 가 있다면 some_header.h 에서는 int a 에 접근 가능하지만 other_header.h 에서는 이 익명 네임스페이스에 접근이 불가능하다. static 과 동일한 역할을 한다고보면된다. static int a 가 전역변수로 있다면 이 변수는 다른 파일에서는 접근 불가능 하지 않.. 2019. 12. 8.
c++ 정규식으로 숫자에 콤마찍기 123456789 -> 123,456,789 하는 코드이다. void removeSpace(std::string& str){ str.erase(remove_if(str.begin(), str.end(), isspace), str.end()); } void appendComma(std::string& expr){ removeSpace(expr); std::regex pattern("\\B(?=(\\d{3})+(?!\\d))"); std::cout 패턴에 해당하는 문자열 456789가 있으며, 뒤에 숫자가 없음. 쉼표 찍음. 다음숫자도 같은방식. 정규식이 이런 순차적으로 탐색하는건지는 모르겠지만, 패턴 적용은 위 과정과 같음. 2019. 10. 27.
백준 1620번 풀면서 c++ map 백준 1620번 문제를 풀면서 1.map 와 2.map 으로 고민을했다. 1번의 경우는 번호순으로 정렬하되, value -> key 작업에서 주어진 string과 같은 value를 찾아서 key를 출력해야된다. 2번의 경우는 문자열순으로 정렬하되, value -> key 작업에서 따로 string 배열을 만들어 O(1)으로 참조가 가능했다. key를 문자열로 정렬하는것은 int에 비해 느릴것이고 같은 key를 찾는것도 느릴것이라 생각해서 1번을 택했었다. 하지만 1번의 경우는 시간초과고 2번은 180ms 정도로 성공했다. 지금 글을 쓰면서 생각해보니 당연한거같네.. 1번의 경우 value->key 작업에서 번호에 대해서만 정렬되있어서 찾는데 오래걸릴거고.. 각 비교또한 O(L) 일테니.. 그에반해 2번은.. 2019. 10. 19.