(TIL) 20-05-28 기록

업데이트:

오늘 한 일

  • 오늘은 조금 오기가 생겨서 하루종일 백준 문제만 풀었다.
  • SoSSul의 repository 함수도 조금은 구현했다.
  • 백준 사이트에서 문제를 풀면서 느낀 것들이 있다.
    • 어떤 언어로 풀든 그 언어의 입출력 기능과 기본 라이브러리 기능에 관해 꿰뚫고 있어야 한다.
    • 솔루션이 생각나도 입출력에서 버벅이면 소용 없다.
    • C++을 사용해도 웬만하면 C 스타일을 쓰는 게 빠르다.
    • scanfcin 모두 공백을 포함한 문자열은 받을 수 없다. scanf로 문자열을 받으려면
      scanf("%[^\n]s", &strin);
      

      이렇게 하는 게 좋다.

    • cin으로 공백을 포함한 문자열을 받으려면
      getline(cin, string);
      

      이렇게 하면 된다. 그런데 이렇게 하면 디버깅이 안 된다.

    • 배열을 함수에서 선언할 때에는 크기가 25만으로 정해진다. 그러나 힙 공간에 선언하거나 static 혹은 전역 변수로 선언해주면 제한이 없어진다.
    • list에서 erase를 쓸 때에는 반드시 매개변수에 iterator++를 해주거나 –를 해주어 iterator가 길을 잃지 않도록 해주어야 한다. 그냥 iterator만 집어넣고 삭제하면 삭제된 원소를 가리키던 iterator에 쓰레기값이 할당된다.
      ls.erase(iter++);
      // 이렇게 하면 삭제 후 삭제된 다음 원소를 가리킨다.
      ls.erase(iter--);
      // 이렇게 하면 삭제 후 삭제된 이전 원소를 가리킨다.
      
    • scanf로 알 수 없는 수만큼의 공백으로 나뉜 변수를 입력받고 싶다면 그냥 반복문을 쓰고 변수를 공백으로 나눠서 한 번에 엔터를 쳐주면 알아서 반복문을 돌려서 실행한다.
    • 어떤 시퀀스에서 직전에 탐색한 놈을 가지고 바로 다음 놈과 비교를 하거나 하려면 스택을 쓰면 좋다.
    • 뭔가 순서를 뒤집어야 한다면 스택을 쓰면 좋다.
    • 스택은 방금 넣은 원소 외에는 의미를 갖지 않는다.
  • 고수들의 문제풀이를 보니 나와 크게 다르지 않은 경우도 있었지만 C++의 기능을 십분 활용해 깔쌈하고 짧게 푸는 경우도 있었다.
  • Rust로 알고리즘을 푸는 사람도 있었다!
  • 사실 오늘 경북대 매트랩 온라인 세미나가 7시에 있었는데 6시 45분에 입장하려고 보니 사이트가 없어졌다 ㅡㅡ 말도 없이 취소하는 게 어딨노..
  • pragmatic programming에서 은근히 자꾸 추천하는 에디터가 emacs더라. 책을 읽어보니 vscode에 vim 플러그인을 쓰면 바람직할 것 같다. emacs는 안 쓸 거다.

내일 할 일

  • 백준 수학 1 강의를 좀 듣고 문제 풀 시간이 있으면 문제를 풀어야 한다.
  • SoSSul에서 repository 관련 함수 구현을 하고 model을 더 만들어야 한다.

잡설

  • 날이 더워졌다. 공기 중에 여름 냄새가 슬슬 나기 시작한다.
  • 아내를 보러 언제쯤 갈 수 있을지 모르겠다. 아내가 너무 보고 싶다.
  • 문제해결을 하면서 느끼는 건데, 진짜 나는 개빡대가리인 것 같다. 빡대가리를 중간 정도 대가리로 만드는 게 당장의 목표이다.
  • 역시 코딩 테스트가 실무에 직결되지는 않는 느낌이다. 코딩 테스트는 빠르고 효율적으로 문제에 맞는 요구사항을 잡아내어서 답을 내다보니 코드의 가독성이 떨어지거나 제시된 문제가 아니라 일반적인 경우에는 전혀 쓸 수 없는 코드가 나오는 경우가 많다. 그래도 복싱 실력이랑 관계 없다고 복싱 선수가 로드웍을 하지 않으면 라운드를 뛸 수 없는 것처럼 개발자도 문제해결력을 기르지 않으면 커다란 솔루션을 만들 때 코드가 개판이 될 수밖에 없는 것 같다.
  • C++로 문제 해결을 하니까 메모리 걱정도 하게 되고 컴퓨터 내부 구조도 고려하게 되는 것 같다. 확실히 unmanaged 언어 하나는 알아두는 게 좋은 것 같다.

태그:

카테고리:

업데이트:

댓글남기기