6-18 TIL

hoin_lee·2023년 6월 18일
0

TIL

목록 보기
187/236

Algorithm

귤 고르기

function solution(k, tangerine) {
    let result = 0;
    let countArr = [0];
    tangerine.forEach(v=>{
        countArr[v] = countArr[v]?countArr[v]+1:1
    })
    countArr.sort((a,b)=>{
        return b-a
    })
    for(let i=0; i<=countArr.length-1; i++) {
        result++
        if(k>countArr[i]) k-=countArr[i]
        else break;
    }
    return result;
}

소요시간이 엄청길게 걸렸다. 처음엔 객체로 만들어서 진행했다가 어차피 배열화 해서 sort를 해야 하는데? 란 생각으로 배열로 만들어 진행했는데 큰 실수였다.
이 경우 배열의 크기가 계속 커지고 할당하면서 배열 순회동안 값이 누적되며 메모리 사용량이 증가하고 처리시간도 길어지게ㅐ 된다
하지만 아래 객체로 처리한 코드는

function solution(k, tangerine) {
  let answer = 0;
  const tDict = {};
  tangerine.forEach((t) => tDict[t] = (tDict[t] || 0) + 1);
  const tArr = Object.values(tDict).sort((a, b) => b - a);
  for (const t of tArr) {
    answer++;
    if (k > t) k -= t;
    else break;
  }
  return answer;
}

키-값 싸으로 저장시키며 훨씬 작은 메모리 공간을 차지하게 되며 좀 더 빠른 속도의 풀이가 가능해진다.
객체로 풀 수 있음에도 잘못 생각한 실수 였다. 객체와 배열의 차이점을 정확하게 캐치하자

CS

프로세스와 스레드

크게 보자면

  • 프로세스
    운영체제로부터 자원을 할당받은 작업의 단위
  • 스레드
    프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

정적 프로그램(Static Program)

프로그램은 윈도우의 *.exe파일이나 Mac의*.dmg 파일과 같은 컴퓨터에서 실행 할 수 있는 파일을 통칭한다. 단, 아직 파일을 실행하지 않은 상태이기 때문에 정적 프로그램 줄여서 프로그램이라고 부른다. 프로그램을 개발하기 위해 코드를 작성하게 되는데 즉, 프로그램은 쉽게 말해 코드 덩어리라고 생각하면 편하다
ex) 엑셀, 카톡, 크롬 등

프로세스(Process)

프로세스는 프로그램을 실행 시켜 정적인 프로그램이 동적으로 변하여 프로그램이 돌아가고 있는 상태를 말한다. 즉, 컴퓨터에서 작업중인 프로그램!
모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행이 된다. 그래서 프로그램을 실행하는 순간 파일은 컴퓨터 메모리에 올라가게 되고, 운영체제로부터 시스템 자원(CPU)을 할당받아 프로그램 코드를 실행시킨다.

비슷하지만 엄밀히 따지면 다른개념으로

  • 프로그램
    • 어떤 작업을 하기 위해 실행할 수 있는 파일
    • 파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은 정적 상태
    • 코드 덩어리
  • 프로세스
    • 실행되어 작업중인 컴퓨터 프로그램
    • 메모리에 적재되고 CPU자원을 할당받아 프로그램이 실행되고 있는 상태
    • 코드 덩어리를 실행한 것

스레드

프로세스의 한계

과거에는 프로그램을 실행할 때 프로세스 하나만을 사용해서 이용했다. 하지만 기술이 발전됨에 따라 프로그램이 복잡해지고 다채로워 지며 프로세스 작업 하나만을 사용해 프로그램을 실행하기에는 한계가 있었다.
현재는 파일을 다운 받으며 다른 일 하는 멀티 작업이 너무 당연하지만 과거엔 파일을 다운 받으면 실행 시작부터 실행 끝까지 프로세스 하나만을 사용하기 때문에 다운이 완료 될 때까지 기다려야 했다.
그렇다고 동일한 프로그램을 여러개의 프로세스로 만들게 되면, 그만큼 메모리를 차지하게 되고 CPU에서 할당받는 자원이 중복될것이다. 스레드(Thread)는 이런 프로세스 특성의 한계를 해결하기 위해 탄생했다

개념

스레드란, 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위를 말한다.
크롬에서 파일을 다운받으며 쇼핑을 하고 웹 게임을 한다면 하나의 프로세스 안에서 여러가지 작업 흐름들을 스레드라고 하며 여러개가 있다면 멀티(다중) 스레드라 한다.
일반적으로 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는데 프로세스를 생성하면 기본적으로 하나의 main 스레드가 생성된다. 스레드2개, 3개.. 는 프로그램을 개발한 개발자가 직접 프로그래밍 하여 위치시켜주어야 하는데 그래서 별도로 스레드 프로그래밍 과목이 있기도 하다!

이것만으론 완전히 부족한 내용이고 전체 내용 정리가 매우 길기 때문에 직접 포스트를 방문해서 쭉 정독하는 것이 제일 좋을 것 같다. Reference 블로그

profile
https://mo-i-programmers.tistory.com/

0개의 댓글