[알고리즘] 올바른 괄호
·
알고리즘
들어가며 Stack - JavaScript를 먼저 공부한 다음 푼 문제입니다. 바로 풀리지 않거나 설명이 필요하다면 참고하는 것을 추천드립니다. 문제 설명 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요. 제한사항 문자열 s의 길이 : 100,000 이하의 자연수 문자열 s는 '(' 또는 ')' 로만 이루어져..
[알고리즘] Stack - JavaScript
·
알고리즘/풀이 힌트
스택? Last In First Out 개념을 가지고 있는 선형 자료구조이다. 마지막에 들어간 요소가 먼저 나오는 방식의 자료구조이다. 자료를 넣는 것을 Push, 빼는 것을 Pop이라고 부른다. 스택의 동작 원리 스택의 동작 원리는 간단하다. Push와 Pop 밖에 가능한 행동이 없기 때문에 그것이 끝이다. 스택 자료구조의 사용처 스택 자료구조를 사용하는 가장 대표적인 곳은 스택 메모리이다. 스택 메모리는 함수가 호출되면 생성되는 지역변수와 매개변수가 저장되는 메모리다. sum 함수가 실행되면 스택 메모리에 지역 변수, 반환 주소값과 매개 변수가 저장된다. 실행 후 함수가 종료되면 Pop이 실행되어 스택 메모리에서 사라진다. 이어서 print 함수가 실행된다. 함수가 실행되면 내부에 있는 console..
[알고리즘] 괄호 회전하기
·
알고리즘
문제 설명 다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다. (), [], {} 는 모두 올바른 괄호 문자열입니다. 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다. 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다. 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return ..
[알고리즘] 배달
·
알고리즘
문제 설명 N개의 마을로 이루어진 나라가 있습니다. 이 나라의 각 마을에는 1부터 N까지의 번호가 각각 하나씩 부여되어 있습니다. 각 마을은 양방향으로 통행할 수 있는 도로로 연결되어 있는데, 서로 다른 마을 간에 이동할 때는 이 도로를 지나야 합니다. 도로를 지날 때 걸리는 시간은 도로별로 다릅니다. 현재 1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 합니다. 각 마을로부터 음식 주문을 받으려고 하는데, N개의 마을 중에서 K 시간 이하로 배달이 가능한 마을에서만 주문을 받으려고 합니다. 다음은 N = 5, K = 3인 경우의 예시입니다. 위 그림에서 1번 마을에 있는 음식점은 [1, 2, 4, 5] 번 마을까지는 3 이하의 시간에 배달할 수 있습니다. 그러나 3번 마을까지는 3시간 이내로..
[알고리즘] 위장
·
알고리즘
문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류 이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. cloth..
[알고리즘] 기준이 되는 배열로 만들 수 있는 모든 배열을 만들기
·
알고리즘/풀이 힌트
0. 들어가며 프로그래머스 후보키를 풀다가 기준이 되는 배열을 가지고 크기가 2, 3, 4 , ... 모든 경우의 배열을 만들어야 했는데 이런 경우도 생각보다 많이 나와서 한번 정리해보았다. 1. 사용 방식 [ 1, 10, 30, 50, 100, 300 ]인 기준 배열이 있다면 기준 배열을 가지고 [ 1 ], [ 10 ], [ 30 ], ... [ 300 ], [ 1, 10 ], [ 1, 30 ], ... [ 1, 10, 30, 50, 100, 300 ] 의 배열을 만든다. 한번에 만들 수 있지만, 원하는 크기의 배열을 만드는 방식으로 작업했다. 2. 코드 구현 const obj = []; const numberArr = [ 1, 10, 30, 50, 100, 300 ]; function makeArr(..
[알고리즘] 후보키
·
알고리즘
문제 설명 프렌즈대학교 컴퓨터공학과 조교인 제이지는 네오 학과장님의 지시로, 학생들의 인적사항을 정리하는 업무를 담당하게 되었다. 그의 학부 시절 프로그래밍 경험을 되살려, 모든 인적사항을 데이터베이스에 넣기로 하였고, 이를 위해 정리를 하던 중에 후보키(Candidate Key)에 대한 고민이 필요하게 되었다. 후보키에 대한 내용이 잘 기억나지 않던 제이지는, 정확한 내용을 파악하기 위해 데이터베이스 관련 서적을 확인하여 아래와 같은 내용을 확인하였다. 관계 데이터베이스에서 릴레이션(Relation)의 튜플(Tuple)을 유일하게 식별할 수 있는 속성(Attribute) 또는 속성의 집합 중, 다음 두 성질을 만족하는 것을 후보 키(Candidate Key)라고 한다. 유일성(uniqueness) : ..
[알고리즘] 이진 탐색 - JavaScript
·
알고리즘/풀이 힌트
0. 들어가며 프로그래머스 순위 탐색 문제를 풀다가 이진 탐색을 실제로 사용해야 하는 상황이 발생해서 정리를 해보았다. 이진 탐색 자체에 대한 내용은 깊게 다루지 않고 어느 정도 이해한 상태라고 가정하고 작성한다. 1. 사용 방식 [10, 30, 50, 60, 100, 200] 이란 배열이 있을 때, 기준 값으로 70이 주어지면 배열에서 70 이상의 값의 개수가 몇 개인지 확인할 때 사용하였다. 2. 코드 구현 for (const item of query) { // item은 query의 값 const key = item.split("and ").join("").split(" "); const score = parseInt(key.pop()); const joinKey = key.join(" "); co..