본문 바로가기

전체 글94

운영체제 프로세스와 스레드의 차이프로세스는 실행중인 프로그램을 뜻합니다. 스택, 힙, 데이터, 코드로 이루어져있고 각 프로세스들은 이 자원을 공유하지 않는다. 최소 1개의 스레드(메인 스레드)를 가지고 있습니다.그리고 스레드는 프로세스의 실행의 단위입니다. 프로세스 내에서 스택만 할당받고, 그 이외의 메모리 영역을 다른 스레드와 공유하기 때문에 다른 스레드의 실행 결과를 즉시 확인할 수 있습니다. 멀티 프로세스와 멀티 스레드의 특징멀티 프로세스는 프로세스들 간의 자원을 공유하지 않습니다. 그렇기 때문에 차지하는 메모리가 멀티 스레드에 비해 크지만, 한 프로세스에서 문제가 발생해도 다른 프로세스에 영향을 미치지 않는다는 특징이 있습니다.멀티 스레드는 스택 외에 다른 자원들을 다른 스레드와 공유합니다. 그렇기 때문에.. 2024. 7. 3.
[JS] n개의 최소공배수 문제 설명두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.  문제 풀이const gcd = (a,b) => { if(b === 0){ return a; }else if(a%b === 0){ return b; }else{ return gcd(b, a%b); };}const lcm = (a,b) =.. 2024. 7. 3.
[JS] 점프와 순간 이동 문제OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가 N 만큼 떨어져 있는 장소로 가려고 합니다. 단, 건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합니다. 아이언 슈트 구매자가 이동하려는 거리 N이 주어졌을 때, 사용해야 하는 건전지 사용량의 최솟값을 return하는 s.. 2024. 6. 29.
피보나치 수 런타임 에러 문제피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.예를들어F(2) = F(0) + F(1) = 0 + 1 = 1F(3) = F(1) + F(2) = 1 + 1 = 2F(4) = F(2) + F(3) = 1 + 2 = 3F(5) = F(3) + F(4) = 2 + 3 = 5와 같이 이어집니다.2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. 문제풀이function solution(n) { let newArr = [0, 1, 1] let fib = (n) => { if(newArr[n] !== un.. 2024. 6. 22.
[JS]JadenCase 문자열 만들기 문제 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.sreturn "3people unFollowed me" "3people Unfollowed Me" "for the last week" "For The Last Week"  문제풀이function solution(s) { var answer = ''; let aa = s.split(" ") for(let i = 0; i 기존 문제 풀이는 이랬는데 자꾸 런.. 2024. 6. 7.
[JS] 퀵정렬, 병합정렬과의 비교 1. 소개퀵정렬이란 pivot(중심축)을 정하고, 중심축 보다 작은 값들은 왼쪽으로, 큰 값들은 오른쪽으로 보내는것이다.pivot을 정해 왼쪽 오른쪽으로 나누고 다시금 왼쪽 오른쪽에 대해 재귀적으로 pivot을 정해 왼쪽 오른쪽을 나누고.. 이 과정을 반복하다보면 결국 정렬이 완성 된다. 2. 작동개념분할: 입력 배열을 피벗을 기준으로 비균등하게 2개의 부분배열로 분할한다.정복: 부분배열을 정렬한다. 부분 배열의 크기가 충분히 작지 않으면 순환 호출을 이용해 다시 분할 정복 방법을 적용한다.결합: 정렬된 부분 배열들을 하나의 배열에 합병한다.순환 호출이 한번 진행될 때마다 최소한 하나의 원소(피벗)는 최종적으로 위치가 정해지므로, 이 알고리즘은 반드시 끝난다는것을 보장할 수 있다. 3. 시간복잡도평균적으.. 2024. 5. 12.
[JS] 병합정렬 1. 소개병합정렬은 대표적은 분할정복 알고리즘 중 하나로, 리스트를 반으로 나눈 뒤 각각을 재귀적으로 정렬하고, 정렬된 두 리스트를 합쳐 하나의 리스트를 만드는 알고리즘 이다. 2. 작동개념일반적으로 세 단계로 구성된다.분할: 입력리스트를 같은 크기의 두개의 부분 리스트로 분할한다. 이때 분할은 리스트의 중간 지점에서 수행된다.정복: 각 부분 리스트를 재귀적으로 병합정렬을 이용해 정렬한다. 이 과정은 입력 리스트의 크기가 충분히 작아질 때까지 반복된다.병합: 정렬된 두 부분 리스트를 하나의 정렬된 리스트로 병합한다. 3. 시간 복잡도O(n log n) 계속 나누고 나눈 다음 합치고 또 합칠 뿐이기 때문에 병합 정렬은 예외 케이스가 없다.(안정성) 4. 구현2가지 함수를 이용해 구현할 수 있다.mergeS.. 2024. 5. 12.
redis cloud 이용해 조회수 기능 구현하기 작품과 컬렉션을 조회하면 조회수가 올라가는 기능을 구현하려 한다.내가 생각했을때 필요한 로직은 다음과 같다.1. 로그인 사용자와 비로그인 사용자 둘다 조회수에 영향을 준다.2. 여러번 조회했을때는 한시간에 한번만 조회수에 영향을 준다. 해당기능을 구현하기 위해서는 여러가지 방법이 있다.1. 쿠키를 이용하는 방법. 2. 세션을 이용하는 방법3. 레디스 서버를 이용하는 방법.  이 중에서 내가 고려한것은 쿠키 또는 레디스를 이용하는 방법인데,쿠키를 이용하려면 사용자가 작품을 조회하면 쿠키에 작품 아이디를 넣어 돌려준다.작품 조회 할때마다 사용자가 갖고있는 쿠키에 작품아이디가 있는지 확인해서 있으면 중복조회로 간주, 없으면 조회수 1 추가. 이런식으로 로직을 구현하면 된다.그러나 쿠키에 담을 수 있는 데이터에.. 2024. 4. 30.
Nest.js, SSE(server sent event)를 이용해 알림띄우기(해결안됨) 1. 개요 이번에 구현할 서비스는 사용자가 작성한 댓글과 컬렉션에 각각 좋아요나 북마크 갯수가 일정 수 이상 추가됐을시 알림을 띄워주는 기능이다. 마이페이지의 알림 버튼을 누르면 사용자와 관련된 알림이 뜨게 하고싶은게 이번 구현 목표 추가로는 사용자를 다른 사용자가 팔로우 했을때도 알림을 띄우고싶다. 이건 아마 댓글, 북마크와 비슷할거같아서 먼저 끝내놓고 구현해 볼 계획이다. 이 기능을 구현하기 위해 가장 먼저 떠오른건 소켓이다. 웹소켓은 양방향 통신을 이용해 대표적으로는 채팅서비스를 만들때 많이 사용하는 기술이다. 하지만 서치를 좀 해본 결과, 내가 구현할 기능은 양방향 통신이 필요없을것으로 예상되었고 보통 알림서비스를 만들기 위해서는 SSE를 많이 사용한다는것을 알게 되었다. 그럼 둘의 차이는 무엇일.. 2024. 4. 22.