본문 바로가기

알고리즘 지식5

C++ string "+" (덧셈) append 속도차이 2023년 1월 USACO 응시 중에 문자열 덧셈을 아래와 같은 형식으로 해주었다. ex = ex + "R"; 코드의 시간복잡도에는 이상이 없었지만 계속 시간초과가 나오는걸 보고 내가 완전히 헷갈리고있는게 있나보다 생각했다. 결국 테케 절반을 TLE로 날리고 solution을 확인해보니 내 코드와 다를 바 없는 정답 코드를 보고 이상함을 느끼게 되었고 시험시 제출하였던 상단과 같은 코드만 바꾸어주니..... 바로 정답이 나오는 것 아니겠는가.... += 도 append와 비슷한 속도다 ans = ans + "R"; 위와 같은 구조가 느린 속도를 보이는 이유는 "새로운 문자열을 생성하여" 기존의 ans에 대입하기 때문이다. 뭐 어쩔 수 없다. 이제라도 알았으니 된거다 2023. 2. 23.
const char* 자료형에서 순회를 하는 방법 Trie 자료구조를 공부하게 되며 const char * 형태의 자료형을 처음 보게 되었다. 위의 방식을 통해 string의 char 하나 하나를 순서대로 순회해줄 수 있다. 2022. 9. 7.
C++ 1ll(1LL)이란 Codeforces의 editorial을 보면 자주 나오는 요소가 있다. 바로 1LL(1ll)이다. 1ll이 어떠한 역할을 하는 걸까? 알아보도록 하자. 위 코드의 출력은 무엇일까? 전혀 예측할 수 없는 값이 나온다. int형으로 선언된 변수 n의 범위를 벗어나 overflow가 발생한 것이다. // int는 32비트를 사용하는 변수이다. 그렇다면 이 코드의 출력은 어떻게 될까? 컴파일러가 warning 해주는 그대로이다. C++에서는 기본 연산을 int(-2^31+1 ~ 2^31-1) 내에서 진행한다. 따라서 1번 코드와 똑같은 Integer overflow가 발생하는 것이다. 이쯤에서 1ll이 무엇인지 어떤 역할을 하는지 설명해보도록 하겠다. 1ll을 '1'과 'll'로 두 개로 쪼갤 수 있다. 앞의.. 2021. 11. 24.
using namespace std의 위험성에 관하여(PS) 글 제목이 다소 자극적으로 보일 수 있어서 결론부터 말씀드리겠습니다. using namespace std는 저희가 짜는 코드(PS)에는 매우매우매우매우 안전합니다. C++을 통해 PS 코드를 작성하게 될 때 꽤 많은 사람들이 겪는 현상이 있습니다. using namespace std; 가 어떤 기능을 하는지도 모른 채 이를 사용하는 것입니다. 물론 using namespace std;의 역할 기능을 필수적으로 알아야 하는 것은 아니지만 매일같이 작성하시는 이 코드를 이해함으로써 만약 추후 작성하실 코드에 오류가 발생하신다면 이에 대해 빠르게 대처할 수 있고 이 코드를 이해한다는 사실만으로 더욱 행복해질 수 있기 때문에 이번 기회에 알아가시면 좋을 것 같습니다. 본격적으로 위험성에 대하여 소개해드리기 전에.. 2021. 11. 23.
삼항 연산자, 조건 연산자 C++ (easy) 처음 알고리즘을 공부하기 시작하였을 때 다른 사람들의 코드를 읽으며 가장 알 수 없었던 부분입니다. C++ (?)(물음표) 기호가 무엇인가요? 등의 검색을 계속했음에도 이 것을 아는 데까지는 꽤 오랜 시간이 걸렸어요. 오늘은 삼항 연산자에 대하여 아주 간단하게 소개하겠습니다. 간단히 표현하자면 삼항 연산자는 (조건) ? (참일 때 반환 결과) : (거짓일 때 반환 결과) 로 이루어 집니다. 예를 들어 이 코드의 반환 값이 예측되나요? 네 맞습니다 3이 출력되지요. 그렇다면 false일 경우에는? 예측하신 그대로입니다. 4가 출력되지요. 앞서 말씀드린 조건 자리에는 if(/*조건*/)에 들어가는 수식에 포함되는 것과 정확히 일치합니다. 그럼 마지막으로 하나 여쭤보겠습니다. ( n > 4 ? 4 : n + .. 2021. 11. 22.