[스파르타 _ 리액트 과정] 10일차

et Ji·2022년 11월 11일
0

TIL

목록 보기
15/40

📜 진행 내용

  • [자습] 프로그래머스 코딩 테스트
  • [강의수강] CS - CPU 실시간 강의 - 강창민 튜터님
  • [강의수강] 알고리즘 실시간 강의 - 강창민 튜터님
  • [강의수강] 자료구조, 알고리즘 1-10 ~ 2-3

💡 배운내용

< CS - CPU란 무엇인가 >

※ 컴퓨터의 구조부터 크게 파악하면서, 구조상 어느 위치에서 어떤 기능을 하는 지 이해하면 좋을 것 같아, 컴퓨터의 구조부터 정리했다..

  • 컴퓨터의 구조 : 하드웨어, 소프트웨어

  • 컴퓨터의 하드웨어의 구성

    ※ 여기에서는 프로세서를 CPU로 통칭함.

    • 프로세서(CPU)
    • 메모리(=기억장치 : RAM, 하드디스크)
    • 주변장치(입출력 장치등)

👉 컴퓨터의 기억장치의 분류

  • 기억장치 : 프로그램, 데이터, 연산의 중간 결과를 저장하는 장치
    • 주기억장치 : 속도가 빠르고, 현재 실행 중인 프로그램 등에 필요한 데이터를 일시적으로 저장
      • RAM, (, ROM), (CPU의) CACHE, (CPU의) 레지스터
    • 보조기억장치 : 주기억장치에 비해 속도는 느리나, 많은 자료를 영구적으로 보관
      • 하드디스크

※ 출처 : CPU 구조

  • CPU란?

    • 흔히 컴퓨터의 뇌라고 비유된다.
    • 프로세서 중 하나인 CPU(Central Processing Unit)는 컴퓨터 하드웨어에 장착된 모든 장치의 동작을 제어하고 하드웨어에 명령, 연산을 실행한다.
  • CPU의 구성

    • 코어 : 각종 연산을 하는 CPU의 핵심 요소
      • 제어 장치 (CU, Control Unit) :
        • 각 장치들이 동작을 순서대로 실행할 수 있도록 명령(신호)을 내리는 역할
        • 주기억장치에서 프로그램 명령어를 꺼내서 해독 후 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력 장치로 보낸다.
      • 연산 장치 (ALU, Atrthmethic Login Unit)
        • 제어 장치의 지시를 받아, 산술, 논리, 비트 연산 등의 연산을 수행하는 장치
      • 기억 장치 (Register) : 연산에 필요한 데이터, 연산 결과, 명령어 주소 등을 임시로 저장
        • PC, AC, IR….
    • 캐시 :
      • 코어 밖 CPU내에 존재하며, 프로세서와 보조기억장치 사이의 속도 향상을 위해 관여한다.
      • 메인 메모리인 RAM에서 데이터를 읽어올 수 있으나, 메인 메모리는 레지스터보다 상대적으로 속도가 느리기 때문에 이 부분을 향상하기 위해 존재한다.
      • 데이터나 값을 미리 복사해놓는 임시 저장소, 원래의 데이터에 접근 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶을 경우에 사용한다.
  • CPU의 동작

    인출 → 해석 → 실행 → 저장

※ 위 과정이 세분화되고, 분리된 각각의 프로세스를 스레드라 한다.

  • 우리가 어떤 프로그램을 실행하면, 그 데이터는 램으로 이동하고, 아래의 과정을 거치게 된다.

    • 인출
      : 주기억장치가 입력장치에서 입력받은 데이터/명령어 또는 보조기억장치에 저장된 프로그램을 읽어옴
    • 해석
      : CPU가 프로그램의 실행을 위해 주기억장치에 저장된 프로그램 데이터를 읽어와 처리 후 결과를 다시 주기억장치에 저장
    • 실행
      : 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 보냄
    • 저장/반영
      : 제어장치가 1~3과정에서 명령어가 순서대로 실행되도록 각 장치를 제어함
  • 컴퓨터와 프로그래머와의 통신

    • 프로그래밍 언어로 코딩된 언어 > 컴파일러를 통해 CPU가 실행할 수 있는 어셈블리 언어로 변환 > 어셈블러를 통해 기계어로 변환
      • 프로그래밍 언어 : 우리가 C+, 파이썬 등 고급 프로그래밍 언어로 코딩한 언어
      • 어셈블리 언어 : 기계어를 인간의 자연 언어에 가깝게 기호화한 언어
      • 기계어 : 0과 1로 이루어진 컴퓨터의 언어

< 자료구조, 알고리즘 >

1-10. 알고리즘 더 풀어보기 (2)

✍️ 반복되지 않는 문자

  • Q. 문제 설명 ❓ Q. 다음과 같이 영어로 되어 있는 문자열이 있을 때, 이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오. 만약 그런 문자가 없다면 _ 를 반환하시오. - 나의 풀이 (Js)
        let a = 'abadabac';
        
        function solution(str) {
          let arr = str.split('');
          for (let i = 0; i < arr.length; i++) {
            copyArr = arr.splice(arr[i], 1);
            if (arr.includes(arr[i])) {
              return arr[i];
            } else {
              return '_';
            }
          }
        }
        
        console.log(solution(a));
  • 강의 풀이 (py)
        def find_not_repeating_first_character(string):
            alphabet_occurrence_array = [0] * 26
        
            for char in string:
                if not char.isalpha():
                    continue
                arr_index = ord(char) - ord("a")
                alphabet_occurrence_array[arr_index] += 1
        
            not_repeating_character_array = []
            for index in range(len(alphabet_occurrence_array)):
                alphabet_occurrence = alphabet_occurrence_array[index]
        
                if alphabet_occurrence == 1:
                    not_repeating_character_array.append(chr(index + ord("a")))
        
            for char in string:
                if char in not_repeating_character_array:
                    return char
        
            return "_"
        
        result = find_not_repeating_first_character
        print("정답 = d 현재 풀이 값 =", result("abadabac"))
        print("정답 = c 현재 풀이 값 =", result("aabbcddd"))
        print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa"))
  • 1차 반복문이 나왔으므로, 시간 복잡도는 O(N)이다!

⁉️ 어려웠던 내용

  • 오늘은 학습한 내용이 너무나 방대해서, 좀더 여러 번 반복해서 보고 소화시켜서 정리해야될 것 같다. CPU가 무엇인지 보다가 결국 컴퓨터가 어떻게 작동하는지를 찾아보게된..

❎ 한 번 더 공부할 내용

  • CPU, 컴퓨터 구조, OS, DB, 네트워크

🎯 문제와 해결

  • 크롬 웹앱 중 백준허브 확장 프로그램을 사용하면, 프로그래머스나 백준에서 문제를 풀고 제출시에 바로 깃허브에 자동 업로드가 되게 할 수 있다.
    • 하지만 계속 업로드에 실패해서, 다른 팀원 분께 여쭤보니 연동할 레파지토리 생성시 리드미 파일 생성에 체크를 했어야 됐다!!

🔗 출처

profile
codesign

0개의 댓글