[TIL] [2023.05.09] 백준 문제풀이 & 타입스크립트로 구현 & C언어: Makefile, BST 순회:(preorder,inorder,postorder),RedBlack Tree,vi 명령어 복습

Pyotato·2023년 5월 9일
0

[TIL]

목록 보기
17/30
post-thumbnail

✍️오늘 공부한 내용


📋새로 배우게 된 내용

1 . 오늘 자주 쓴 vi 명령어 모음

vi 명령어동작
i현재 커서 위치에 삽입 (입력모드로 전환)
a현재 커서 바로 다음 위치에 삽입 (입력모드로 전환)
u방금한 명령 취소 ( == ctrl + z)
yy현재 줄을 버퍼로 복사 (한 줄 ctrl + c ) ex. 5줄 복사 : 5yy
p현재 커서가 있는 줄 바로 아래에 버퍼 내용 붙여넣기 (이전에 복사한 줄을 현재 커서 아래부터 ctrl + v)

2. Makefile 하는 이유 & 하는 방법

컴파일 과정

  • Makefile을 하는 이유는 프로그램 실행 과정이랑 밀접함
    • .c 소스파일을 .o 실행파일로 만들 때, 수정을 하면 수정 파일을 또 컴파일하고 실행파일로 만들어줘야한다. gcc 파일명.c 하고 ./a.out으로 실행 반복했던 거
    • 이 번거러움을 덜기 위해 Makefile을 통해 수정한 파일들만 make라는 명령어를 통해 쉽게 컴파일하도록하기 위해 한다.
  • Makefile의 구성 (tab + 명령어 필수!)
    TARGET : dependencies # 타겟을 만들건데 dependencies를 바탕으로 해줘
    	명령어 #타겟을 만들기 위해 실행할 명령어들
  • 위의 반복부분을 변수화해서 수정을 용이하게 하자!
    🐣 CC : 현재 쓸 컴파일러 이름 (c니까 gcc)
    🐣 TARGET : 우리가 만들고자하는 거, 실행파일인 app.out
    🐣 OBJS : dependency들, 즉 목적파일들
    🐣 CFLAGS : 컴파일 시 줄 수 있는 옵션들 -Wall, -g
    🐣 LDFLAGS : 바이너리 파일 생성 시 링커가 필요한 라이브러리들 명시,우리는 C만 필요하니까 -lc
  • 옵션 추가를 해서 간단하게 하자!
    🐣 all 키워드를 추가해서 우리가 만들고자하는 거를 명시해서 $(TARGET)에 해당되는 명령어의 위치가 어디에 있든 모든 명령어들을 실행하도록 (없다면 맨 윗줄 하나만 실행하므로)
    🐣 clean 키워드 : rm -f로 일일히 삭제해줄 필요없이 clean이라고 터미널에 한번 쓰면 만들어줬던 파일들을 모두 삭제하도록

🤯어려웠던 점

  • rbtree 구현하려니까 rbtree 개념을 잘 알고 있는 지 점검이 필요한 거 같았다.
  • rotate시 어떻게 어떻게 되고, 노드 색이 어떻게 변경이 되는 지 확실하지 않으니까 코드 이해가 어려운 듯해서 이거부터 확실히 하고 넘어가자.

😸어려움을 해결한 방법

  • 요즘은 미해결/해결중이 더 많은듯..?
  • 손으로 직접 노드추가하면서 그려보니까..
    rbtree by hand
  • rotate해줄때 헷갈리는 거 같다.
    • Red Aunt Color change면 결과로 Parent가 Red고 자식들이 Black고
    • Black Aunt Rotate면 결과로 Parent가 Black, Child가 Red)라고
  • test case도 하나씩 해봐야 확실해질듯하다.

🤔아쉬웠던 점

  • 욕심은 rbtree구현까지 마치고 TIL을 쓰고 싶었지만..일단은 12전까지 오늘 했던 걸 정리하고, 지금 이후의 공부한 건 내일로 넘겨야지..

😝느낀점

  • 🤔 왜 ts로 백준 문제풀이를?
    • ts로 백준 제출하는 것도 아니고 c랑 파이썬만 하다보니까 js와 ts사용에 대한 감을 잃고 싶지 않아서 간단하게 기억 상기할 목적으로 추가해봤다.
    • 실제로 min() 대신에 뭐썼더라 setInterval(2) 아 맞다 Math.min()! 해서 더욱 필요성을 느꼈다. 검색 안해도 될 만큼은 기억하네
    • map()함수도 내가 잘 기억하고 있나 보려고 간단하게 구현해보자. 어떤 언어로 쓰던 로직은 한번 짜면 구현하기 어렵지 않으니까 너무 부담되지 않을듯해서 앞으로 js/ts로 구현한 것도 올릴 예정이다.
  • 🤯 C언어 공부할 게 너무 많다. 운영체제도 그렇고 컴퓨터가 어떻게 돌아가는 지 파악해야 이해가는 언어라 당연한 거 같다.

👊다짐

  • rbtree 뽀개고 잔다😭

🚀오늘의 한줄평

If you wish to make an apple pie from scratch, you must first invent the universe - Carl Sagan

rbtree 구현을 위해 참고하던 중 마지막에 나왔던 Carl Sagan의 인용구

🍎프로그래밍 언어들의 조상(?)격인 C언어를 공부하는데 살며시 적용가능한 말이 아닌가 싶다.

🥧무(無)에서 프로그램(애플파이)을 짜려면 C언어(프로그래밍의 동작 원리를 보여주는 언어)를 공부(invent the universe)하고 나서야 가능한 느낌..

👩‍💻 어렵지만 그만큼 뭔가를 만든다는 거에는 깊은 이해를 동반한다는게 아닐까..그리고 그 이해를 한다면 애플파이 만드는 법은 기억력이 닿는 한 까먹지 않을듯 (C언어도!)

profile
https://pyotato-dev.tistory.com/ 로 이사중 🚚💨🚛💨🚚💨

0개의 댓글