내일배움캠프 Node.js 본캠프 49일차

김선우·2024년 10월 18일
post-thumbnail

알고리즘 문제풀기

최댓값과 최솟값

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

제한 조건

s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

풀이 코드

function solution(s) {
    var answer = '';
    const arr = s.split(" ").map(x => +x)
    var max = arr[0]
    var min = arr[0]
    for( i = 1; i < arr.length; i++){
        if(arr[i] >= max){
            max = arr[i]
        }
        if(arr[i] <= min){
            min = arr[i]
        }
    }
    answer = `${min} ${max}`
    return answer;
}

풀이 과정

주어지는 문자열을 split으로 배열을 만들고, 각 원소들을 string에서 number 형으로 변환한다.
최댓값과 최솟값을 배열의 첫 번째 요소로 설정한다.
배열의 두 번째 요소부터 탐색하며 최댓값과 최솟값을 비교한다. 해당 최댓값과 최솟값을 answer에 넣어준다.

JadenCase 문자열 만들기

문제 설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건

s는 길이 1 이상 200 이하인 문자열입니다.
s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
숫자는 단어의 첫 문자로만 나옵니다.
숫자로만 이루어진 단어는 없습니다.
공백문자가 연속해서 나올 수 있습니다.

풀이 코드

function solution(s) {
    return s.split(' ').map(word => 
      word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()
    ).join(' ')
  }

풀이 내용

split을 통해 단어별로 구분해준 후 toUpperCase로 첫 글자만 대문자로 변경 해준다. 이후 나머지 글자를 모두 toLowerCase를 통해 소문자로 변경해준다.

공부한 것

  • charAt(인수) : 인수번째의 문자를 읽어냅니다.
    • ex) "javascript".charAt(2) = 'v' => 0번째부터 읽어짐.

CPU와 메모리

  • 컴퓨터의 구성

입출력 장치

컴퓨터와 사용자가 의사소통하는 창구.

입력 장치

  • 사용자가 컴퓨터에게 명령하는 창구.(키보드, 마우스, 터치스크린, 마이크, 스캐너, 카메라 등...)
  • 사용자는 입력장치를 통해 컴퓨터에게 명령을 요청하거나 데이터를 입력.

출력 장치

  • 컴퓨터가 사용자에게 데이터를 보여주거나 처리 결과를 보여주는 창구.(모니터, 스피커, 프린터 등...)
  • 컴퓨터는 출력장치를 통해 사용자에게 명령이나 데이터를 입력할 수 있는 화면을 보여주거나 해당 명령에 대한 처리결과를 보여주거나 들려줌.

CPU

  • 컴퓨터가 사용장의 명령에 대한 작업을 수행하는 처리장치.

구성

  • 산술논리 연산장치(ALU) : 비교, 판단, 연산을 담당
  • 제어부(CU)와 내부 버스 : 명령어의 해석과 올바른 실행을 위해 CPU를 내부적으로 제어.
  • 메모리 유닛
    • 레지스터

      연산에 필요한 데이터를 저장하고 빠른 속도로 접근할 수 있는 저장공간.
      • 범용 레지스터 : 연산에 필요한 데이터나 연산 결과를 임시로 저장.
      • 특수목적 레지스터 : 특별한 용도로 사용되는 레지스터
        • 메모리 주소 레지스터(MAR) : 읽고 쓰기 위한 주 기억장치의 주소를 저장.
        • 프로그램 카운터(PC) : 다음에 수행할 명령어의 주소를 저장.
        • 명령어 레지스터(IR) : 현재 실행 중인 명령어를 저장.
        • 메모리 버퍼 레지스터(MBR) : 주 기억장치에서 일겅온 데이터나 저장할 데이터를 임시로 저장.
        • 누산기(AC, AcCumulator) : 연산 결과를 임시로 저장.
    • 캐시 메모리(L1) : 처리속도를 높여주는 역할.

동작

  1. 명령어 인출 - 제어부가 수행할 명령어 정보를 가지고 옴.
  2. 명령어 해독 - 명령어 정보를 인출 후 해독.(opcode라는 명령어 코드르 인출하고 opcode의 성격에 맞는 레지스터들을 준비시킴.)
  3. 실행 - 해독된 명령어 수행. (ex : 산술/논리 관련 연산이면 ALU가 주체가 되서 실행.)
  4. 반영 - 수행 결과를 반영함으로써 명령어 수행의 한 사이클이 끝남.

성능

클럭

  • CPU 내부에서 일정한 주파수를 가지는 신호.
  • 1Hz = 1초에 한번 / 1GHz = 1초에 1기가만큼.(약 10억 번)
  • 클럭 주파수가 빠르다 = 제한된 시간에 더 많은 명령을 처리 가능하다. => 더 좋은 성능의 중앙 처리 장치.

코어

  • 중앙처리 장치 역할을 하는 블록.
  • 멀티 코어들은 싱글 코어에 비해 여러 개의 CPU가 작동하듯이 많은 연산을 빠르게 병렬 처리할 수 있다.

메모리

  • 레지스터 = CPU
  • 캐시메모리(SRAM), 메인 메모리(DRAM) = 주 기억장치
  • 하드디스크(HDD) = 보조 기억장치

캐시 메모리(L2, L3)

  • 컴퓨터 시스템 향상을 위해서 CPU와 주기억장치 사이에 있는 아주 작은 비싼 메모리.
  • CPU에 속한 캐시 메모리는 L1 캐시메모리이고 메모리그룹에 속해있는 캐시메모리는 L2, L3 캐시메모리이다.
  • 메인 메모리에 있는 데이터를 캐시 메모리에 불러온 후 CPU가 필요한 데이터를 캐시에서 먼저 찾게 해서 시스템 성능을 향상시킴.(레지스터와 비슷하지만 다름.)
    • L2, L3 캐시 메모리는 CPU와 별도의 공간이고, 메인 메모리와 CPU간의 속도차이를 극복하기 위한 것.
    • CPU 레지스터는 cPU안에서 연산을 처리하기 위해 데이터를 저장하는 공간.

주 기억장치(= RAM)

  • 컴퓨터의 전원이 꺼지면 지워지지만 조금 더 빠르게 조회할 수 있는 저장 공간.
  • RAM = Random Access Memory
    • DRAM과 SRAM으로 나눠짐.
  • 현재 처리중인 데이터나 명령만 일시적으로 저장하는 휘발성 메모리.
  • 보조기억장치(하드디스크)보다 접근 속도가 빠름.
  • HDD - RAM - CPU와 유사한 방식으로 연산과정의 중간에 위치.

SRAM vs DRAM

  • SRAM - static RAM
    • 정적 메모리
    • 전원이 공급되는 동안 내용이 지워지지 않음 - 재충전 필요 x
    • 접근 속도가 빠르고 가격이 비쌈. => 캐시메모리나 레지스터로 사용됨.
  • DRAM - Dynamic RAM
    • 동적 메모리
    • 전원이 공급되도 주기적으로 재충전되야만 기억된 내용을 유지.
    • 주로 대용량의 기억장치에 사용, 가격이 저렴.
    • 주로 RAM이라 표현하는것(= 주 기억장치)은 거의 DRAM을 가리킴.

보조 기억장치

  • 컴퓨터 전원이 꺼져도 지워지지 않는 저장공간.
  • 사용자가 사용하고자 하는 데이터와 프로그램을 반영구적으로 저장.
  • 전원을 꺼도 저장된 데이터나 정보가 날아가지 않는 비휘발성 메모리.
  • 모든 프로그램이나 파일들은 이곳에 반영구적으로 저장됨.

CPU와 메모리

동작

  1. 주기억장치가 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램을 읽어온다.
  2. CPU는 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와 처리하고 결과를 다시 주기억 장치에 저장한다.
  3. 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 보내서 출력시킨다.
  4. CPU 내의 제어장치(CU)가 1~3번 과정에서 명령어가 순서대로 실행되도록 각 장치들을 제어한다

구조

하버드 구조

  • 명령어 메모리 : 프로그램에서 사용할 명령어를 모아둔 메모리
  • 데이터 메모리 : 명령어들로 사용될 메모리
  • 산술논리장치(ALU) : 데이터를 가지고 명령어를 읽어서 연산 수행
  • 장단점
    • 장점 : 메모리가 두개이기 때문에 역할이 나눠져있고 속도가 빠름.
    • 단점 : 구성이 많으므로 비싸고, 복잡한 구성으로 인해 고장 확률이 높음.

폰노이만 구조

  • 보조기억장치에서 데이터들이 CPU에서 연산되기 위해 하나의 메모리로 이동.
  • 제어장치는 산술논리장치에 데이터가 메모리 어디에 위치한지 알려주는 역할.
  • 프로그램 메모리와 데이터 메모리가 구분되어 있지 않고 하나의 버스를 가짐. => 병목현상 발생.

개선된 구조

  • 하버드 구조 + 폰노이만 구조
  • CPU의 캐시 메모리 형상에 관여
  • CPU 내부 - 하버드 : CPU 내부에 캐시를 둬서 RAM과 CPU 간의 속도 차이를 줄이려고 노력
  • CPU 외부 - 폰노이만 : 메모리 하나에 하나의 버스를 가지는 구조이기 때문에 병목현상이 아직까지는 존재한다.

0개의 댓글