문제 설명 운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다. 1. 실행 대기 큐(Queue)에서 대기 중인 프로세스 하나를 꺼냅니다. 2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다. 3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다. 3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다. 예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게 됩니다. ..
문제 설명 경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다. 예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3]이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다. 경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 ..
문제 설명 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 문제 풀이 function solution(n) { let num = n while(true){ num++ if(oneCount(num) === oneCount(n)) return num } return ..
시작하기 커스텀 프로바이더는 다음과 같은 경우에 사용됩니다. Nest 프레임워크가 만들어주는 인스턴스 또는 캐시 된 인스턴스 대신 인스턴스를 직접 생성하고 싶은 경우 여러 클래스가 의존관계에 있을 때 이미 존재하는 클래스를 재사용하고자 할 때 테스트를 위해 모의 버전으로 프로바이더를 재정의하려는 경우 밸류 프로바이더 밸류 프로바이더는 provide와 useValue 속성을 가집니다. useValue는 어떤 타입도 받을 수 있기 때문에 useValue 구문을 이용해 외부 라이브러리에서 프로바이더를 삽입하거나 실제 구현을 모의 객체로 대체할 수 있습니다. @Module({ imports:[UsersModule], providers: [{ provide:UsersService, useValue:mockUser..
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 크레인을 작동하면 주어진 라인에서 가장 상위에 있는 인형이 무조건 뽑히고 인형은 바구니에 담깁니다. 이때 바구니에 같은 인형이 2개 연속으로 있으면 터져서 사라집니다. 뽑기 판(board)과 라인(moves)이 주어질 때 터져서 사라진 인형의 개수를 구하는 문제입니다. 문제 풀이 function solution(board, moves) { let answer = 0 let s..
Node.JS는 다른 웹 프레임워크와는 다르게, 멀티 스레드 상태 비저장 모델을 따르지 않습니다. 따라서 싱글턴 인스턴스를 사용하는 것은 안정한 방식이고 이는 요청으로 들어오는 모든 정보(DB커넥션 풀, 전역 싱글턴 서비스 등)들을 공유할 수 있습니다. 하지만 GraphQL 애플리케이션의 요청별 캐싱을 한다거나 요청 추적, 멀티테넌시를 지원하기 위해서는 요청 기반으로 생명주기를 제한해야 합니다 멀티 테넌시: 하나의 애플리케이션 인스턴스가 여러 사용자에게 각각 다르게 동작하도록 하는 SW 아키텍처를 말합니다. Nest.JS에서는 컨트롤러와 프로바이더에 스코프 옵션을 주어 생명주기를 지정하는 방법이 있습니다. DEFAULT: 싱글턴 인스턴스가 전체 애플리케이션에 공유됩니다. 애플리케이션이 처음 시스템 구동을..
문제 설명 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 제한사항 문자열의 길이 : 1,000,000 이하의 자연수 문자열은 모두 소문자로 이루어져 있습니다...
문제 설명 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()"는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요. 제한사항 문자열 s의 길이 : 100,000 이하의 자연수 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다. 문제 풀이 첫번째 실패 문제 풀이 function solution(n) { let answer = true let arr = [] le..
문제 설명 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현하는 방법이 여러 개라는 사실을 알게 되었습니다. 예를 들어 15는 다음과 같이 4가지로 표현할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해 주세요. 제한사항 n은 10,000 이하의 자연수 입니다. 문제 풀이 function solution(n) { var answer = 1; let lt = 1; let sum = 0; for(let rt = 1; rt n){ sum -= lt++ if(sum =..
기술 면접 스터디를 하면서 Node.JS에 대해서 많은 것을 알게 되었습니다. 새롭게 배운 내용을 다시 한번 되새기며 지식으로 습득하기 위해 블로그에 다시 한번 정리해 봅니다. Node.JS란 무엇인가? Node.JS는 자바스크립트를 브라우저 밖에서도 실행할 수 있도록 하는 자바스크립트의 런타임 환경입니다. Node.JS는 비동기 이벤트 기반 자바스크립트 런타임으로 확장성 있는 네트워크 애플리케이션을 만들 수 있도록 설계되었습니다. Node.JS에 동작 원리 Node.JS는 싱글 스레드이며, 이벤트 기반 논 블로킹 모델로 구성되어 있습니다. 싱글 스레드는 프로세스 내에서 하나의 스레드가 하나의 요청만을 수행합니다. 프로세스: 메모리에 올라와 실행되고 있는 프로그램의 인스턴스를 말합니다. 스레드: 프로세스..
문제 설명 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. 1. x의 모든 0을 제거합니다. 2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 s의 길이는 1 이상 150,000 이하입니다. s에는 '1'이 최소 하나 이상 포함되어 있습니다...
문제 설명 길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.) 예를 들어 A = [1, 4, 2] , B = [5, 4, 4] 라면 A에서 첫번째 숫자인 1, B에서 첫번째 숫자인 5를 뽑아 곱하여 더합니다. (누적된 값 : 0 + 5(1x5) = 5) A에서 두번째 숫자인 4, B에서 세번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 5 + 16(4x4) = 21..