[TIL/크래프톤 정글] Day 9

2024. 9. 11. 10:23·활동/크래프톤 정글


🖐️[크래프톤 정글] TIL - 240910

어제도 작성을 했지만 시간 관리가 잘 되는 것 같지 않다. 요즘 들어서 정글 강의실 내부를 돌아다니는 일이 너무 잦다. 왜? 왜? 이렇게 정글 강의실을 돌아다닐까에 대해서 자기 전에 고민을 해봤는데 할 일이 정해지지 않아서인 것 같다고 결론을 내렸다. TodoMate에 당일에 할 내용을 작성하고 있지만, 시간을 정해서 하는 것이 아니다보니, 너무 추상적인 일정이 만들어지고 할 일이 너무 많다보니 정리가 제대로 되지 않는 느낌이다. 시간대를 나눠서, 조금 더 효율적인 일정으로 개선할 필요를 느끼는 요즘이다.

 

그리고 09월 10일은 어제가 맞다. 어제 작성하고 돌아가는 것을 까먹었다. ㅎㅎ; 사소한 미스


*️⃣오늘 할 일

  1. TIL 게시글 작성하기
  2. 알고리즘 스터디 일일 학습량 진도 나가기
  3. CS 책 공부하기

☑️ 일곱 난쟁이 [2309번]

아홉 난쟁이 중에서 백설공주의 일곱 난쟁이를 찾는 문제. 일곱 난쟁이의 키 합은 총 100이다.

풀이 방법 정리

  1. 주어진 수를 전부 합친 후에 100을 제한다.
  2. Array를 오름차순으로 정렬하고 후순위 탐색을 진행한다.
    1. 후순위 탐색을 진행하는 이유 : 수가 낮은 것 보다 높은 것들을 먼저 판별하는 것이 합리적이라고 판단함
  3. 2중 For문을 사용해서 I와 j를 더하면서 1번에서 얻은 수와 동일한지 비교한다.

☑️ 외판원 순회 2 [10971번]

1번부터 N번까지 번호가 매겨진 도시가 있다.

어느 한 도시에서 출발해서 N개의 도시를 모두 거쳐 원래의 도시로 돌아온다. (순회한다)

방문한 도시로는 돌아갈 수 없다. ( 최종 목적지 → 출발지는 예외 )

가장 적은 Cost를 들이는 여행 계획

제공 받는 값

도시 간 이동에 필요로하는 비용은 행렬 W[i][j] 형태로 주어진다

  • **W[i][j]**는 **도시 i**에서 **도시 j**로 가기 위한 비용
  • 비용은 대칭이 아님! 도시 i ▶️ 도시 j 비용과 도시 j ▶️ 도시 i 비용은 다르다!
  • 비용은 항상 양의 정수이며, i와 j가 동일한 경우 0이다.

Chapter 1. 컴퓨터 시스템으로의 여행

1.1. 정보는 비트와 컨텍스트로 이루어진다.

  • 프로그래머가 Hello.c 텍스트 파일을 생성하면 내부적으로 파일은 0과 1로 표시된 비트들의 연속이며, 그들은 Byte라는 8비트 단위로 구성된다.
    • 텍스트 문자를 바이트로 표시할 수 있다.
  • 컴퓨터는 텍스트 문자를 아스키 표준을 사용하여 표시한다.
    • 0과 1로 표시된 파일을 **바이너리 파일(Binary File)**이라고 하는데 바이너리 파일을 아스키 코드를 통해 인코딩 한다고 말할 수 있다.
    • 인코딩은 바이너리 파일을 문자로 변환하는 과정을 의미하며 대표적으로 아스키, UTF-8, UTF-16, 등의 방법들이 존재한다.
  • Hello.c 파일은 바이트 집합으로 파일에 저장된다. 각 바이트는 인코딩 방식에 따라 문자에 대응되는 정수 값들을 가진다.
    • 예를 들어보자. 첫 번째 바이트는 ‘35’인데 이것은 아스키 코드 ‘#’에 대응된다.
    • 두 번째 바이트는 ‘105’로 아스키 코드 ‘i’에 대응된다.
  • 컴퓨터의 내부 시스템 정보는 모두 비트로 표시된다.
    • 디스크 파일, 메모리 상의 프로그램, 데이터, 등
  • 컴퓨터의 프로그램에는 프로그램 연산을 처리하기 위해서 필요한 데이터들이 존재하는데 이를 컨텍스트(Context)라고 한다. 컨텍스트는 서로 다른 객체들을 구분할 수 있는 유일한 방법이다.
    • 컨텍스트를 통해서 서로 다른 객체들을 구분한다?
      1. 이 부분에서 객체가 무엇인지 정의가 되어야 한다.
      2. 컨텍스트에 프로세스 정보가 포함되어 있다면, 해당 내용은 올바르다.
    • 이 부분에 대해서는 의견을 정리할 필요가 있다. 책에서 말하는 다른 객체들의 정의가 무엇인지 식별할 수 있어야 한다. 컴퓨터에서 객체란, 프로그램이고 프로그램은 프로세스를 의미하는데 프로세스를 구분할 수 있는 유일한 정보가 컨텍스트인 것은 거짓이다.

1.2. 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다

  • ‘Hello, World!’를 출력하는 프로그램을 생성한다면, 사람은 바로 ‘Hello, World!’를 출력하는 고급 프로그램이 된다. 그렇지만 프로그램을 실행하면 내부적으로 C언어 코드들은 다른 프로그램에 의해서 컴퓨터가 이해할 수 있는 저급 기계어 인스트럭션들로 번역된다.
    • 저급 인스트럭션이란? 사람이 읽기 힘들고 프로그램이 읽기 쉽게 번역된 문장들, 어셈블리 코드에서 사용하는 명령어들을 의미한다.
    • 인스트럭션들은 실행 가능 목적 프로그램 형태로 합쳐져 바이너리 디스크 파일로 저장된다.
  • 다음과 같이 GCC 컴파일러를 통해서 Hello.c 파일을 읽으면 실행파일인 Hello.exe로 만든다.이러한 과정은 총 4단계를 거쳐서 실행되며, 다음과 같다.
    • 전처리기(Processor)
      • 코드 파일에 위치한 **#include**와 같은 전처리기를 디렉티브(Directive)를 따라서 진행한다.
      • 전처리기 과정이 종료되면 **i 확장자**를 가진 **Hello.i 파일**을 생성한다.
    • 컴파일러(Compiler)
      • 코드 파일에 위치한 내용을 CPU 명령어를 조합안 어셈블리 코드로 변환하는 과정이다.
      • 컴파일러 과정이 종료되면 **s 확장자**를 가진 **Hello.s 파일**을 생성한다.
    • 어셈블러(Assembler)
      • 어셈블리 코드를 바이너리 코드로 변환하는 과정을 거친다. 이후, 재배치가능 목적 프로그램(Relocatable Object File)의 형태로 묶어서 결과물에 저장한다.
      • 어셈블러 과정은 **o 확장자**를 가진 **Hello.o 파일**을 생성한다.
      • **Hello.o 파일**을 실행하면 깨진 것과 같은 쓰레기 값들을 볼 수 있다.
    • 링커(Linker)
      • Hello**.c 파일**로 돌아가면 ‘Hello, World!’라는 문자열을 출력하기 위해서 print 함수를 사용했을 것이다. 하지만, 우리가 작성한 파일(Hello.c)에는 print 함수를 정의한 적이 없다. 그러면 어떻게 print 함수를 불러올 수 있을까?
      • Hello**.c 파일을 컴파일하게 된다면, 연관이 있는 다른 파일들도 컴파일을 별도로 진행하게 된다. Hello.o 파일** 뿐만 아니라 print 함수가 정의 및 구현되어 있는 **print.o 파일**도 컴파일된다.
      • Hello**.c 파일**은 print 함수를 사용하기 위해서 **print.o 파일**과 **결합**될 필요가 존재한다. 링커 단계에서 이러한 작업을 수행한다.
      • 링커 과정이 끝나면 **실행가능한 목적파일(EXE, DLL, 등)**이 생성된다.
        • 이후 파일을 실행하면 컴퓨터 메모리 위에 올라가며 시스템에 의해서 실행된다.
  • linux> gcc -o hello hello.c

1.3. 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다.

정독보다는 속독으로 넘어가자. 왜 CS를 배워야 하는지에 대한 이야기다.

  • 프로그램 성능 최적화하기
    • 컴파일러의 내부 동작을 알 필요는 없지만, C언어 코드 작성 시 올바른 판단을 위해서 기계어 수준 코드에 대한 이해를 할 필요가 있다.
    • 어떤 방식으로 C언어 코드가 작동하는지 알 수 있다면, 코드를 조금 더 효율적으로 다룰 수 있기 때문이다.
  • 링크 에러 이해하기
    • 링커의 동작은 예측하기 어려운 프로그래밍 이슈를 만들어낸다.
  • 보안 약점 피하기
    • 버퍼 오버플로우(Buffer Overflow) 취약성이 인터넷과 네트워크 상의 보안 약점의 주요 원인으로 설명되었다.
    • 흭득한 데이터의 크기와 형태를 깊게 제한할 필요를 인식하지 못하기에 생기는 문제로, 안전함의 첫 걸음은 프로그램 스택에 데이터와 제어 정보가 저장되는 방식 때문에 생겨나는 영향을 이해하는 것이다.

1.4. 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다.

  • Hello.c 파일은 컴파일 단계를 거쳐서 실행 가능한 목적 파일(EXE)로 변경되어 컴퓨터의 저장 공간에 저장되었다.
  • Shell(윈도우에서의 PowerShell, 맥의 Terminal, 등)을 통해서 실행 가능한 목적 파일을 실행할 수 있다.

1.4.1. 시스템의 하드웨어 조직


언제나 정글러 화이팅! ⚔️⚔️

'활동 > 크래프톤 정글' 카테고리의 다른 글

[크래프톤 정글] 1주차 간담회  (0) 2024.09.12
[TIL/크래프톤 정글] Day 10  (2) 2024.09.12
[TIL/크래프톤 정글] Day 8  (0) 2024.09.09
[TIL/크래프톤 정글] Day 6  (4) 2024.09.08
[TIL/크래프톤 정글] Day 5  (2) 2024.09.07
'활동/크래프톤 정글' 카테고리의 다른 글
  • [크래프톤 정글] 1주차 간담회
  • [TIL/크래프톤 정글] Day 10
  • [TIL/크래프톤 정글] Day 8
  • [TIL/크래프톤 정글] Day 6
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      오블완
      티스토리챌린지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    [TIL/크래프톤 정글] Day 9
    상단으로

    티스토리툴바