프로그래머스 다리를 지나는 트럭 (JavaScript), (stack/queue)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42583문제 설명더보기트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다.예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.경과 시간 다리를 지난 트럭 다리를 건너는 트럭 대..
LeetCode Simplify Path (JavaScript)
·
코딩테스트/LeetCode
링크 : https://leetcode.com/problems/simplify-path/description/문제 설명더보기You are given an absolute path for a Unix-style file system, which always begins with a slash '/'. Your task is to transform this absolute path into its simplified canonical path.The rules of a Unix-style file system are as follows:A single period '.' represents the current directory.A double period '..' represents the previous..
LeetCode Generate Parentheses (JavaScript)
·
코딩테스트/LeetCode
링크 : https://leetcode.com/problems/generate-parentheses/description/문제 설명더보기더보기Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.Example 1:Input: n = 3Output: ["((()))","(()())","(())()","()(())","()()()"]Example 2:Input: n = 1Output: ["()"]Constraints:1 문제 풀이dfs를 활용해 문제 해결dfs의 인자로 빈문자열, n(개의 여는괄호), n(개의 닫는괄호) 를 전달 받음1. left가 0이라는 건 여는 괄호를 모두 ..
프로그래머스 햄버거 만들기 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/133502?language=javascript문제 풀이stack을 이용하여 문제 풀이ingredient에서 하나씩 push 하면서 stack의 값이 1 2 3 1 인 경우 stack에서 제외시키고 answer 1증가시키면 됨function solution(ingredient) { var answer = 0; const stack = []; for (const target of ingredient) { stack.push(target); if (stack.length >= 4) { if ( s..
프로그래머스 택배상자 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131704문제 풀이택배 기사님이 원하는 형태로 택배의 순서를 만들기위해 보조 컨테이너(stack)에 넣어 보관1. 만약 o(기사님이 원하는 택배 값) 보다 index가 작거나 같을 때까지 stack에 넣어둠2. stack의 가장 끝이 택배 기사님이 원하는 값일 경우 pop(), answer 1증가3. 아니라면 원하는 형태를 만들 수 없으므로 현재까지의 answer 값 리턴function solution(order) { var answer = 0; let stack = []; let index = 1; for (const o of order) { while (..
프로그래머스 주식가격 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42584문제 풀이일반적으로 특정 index를 나머지의 값들과 비교하는건 O(n^2)으로 비효율적임 -> stack을 이용1. 주식 가격이 떨어지지 않는다면 stack에 계속 push (index 값을 저장)2. 주식 가격이 떨어졌다면 가장 끝에 있는 index를 꺼내어 현재 index(i)와 비교하여 answer에 추가 -> i번째에서 특정 Index의 차이 구하기3. 비교가 끝나면 i를 stack에 저장4. 마지막으로 stack에 남아있는 값 계산 (전체 길이에서 현재 index만큼 빼주고 -1해주면 총 길이가 나옴)function solution(prices) { let answer..
프로그래머스 뒤에 있는 큰 수 찾기 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/154539문제 풀이기존의 2중 for문을 통해 검사를 할 경우 최대 100만 x 100만의 시간 복잡도로 시간초과 오류가 발생따라서 100만 x ?? 부분을 효율적으로 처리를 해야함stack을 이용한 풀이1. numbers를 순차적으로 진행2. stack에 값이 있고, stack의 마지막 값에 해당하는 numbers값이 현재(i번째) numbers값 보다 작은 경우 stack 마지막 값을 i번째 값으로 설정3. 이후 i를 stack에 추가[9, 1, 5, 3, 6, 2]를 예시로 들면9 -> 1 인 경우 stack은 [0, 1]이 쌓여있음 이후 5에 대해 검사를 하게 되면 위 2번 로직을 통..
프로그래머스 기능개발 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42586문제 풀이stack 자료구조를 이용해 접근1. 가장 앞을 기준으로 완료를 해야 뒤에 있는 것들도 처리가 가능하므로 가장 앞에 있는 것을 shift() 하여 남은 일 수 검사2. 남은 일 수 만큼 나머지 progress 들도 남은 일 수 * speed만큼 더해줌3. 가장 앞의 progress를 완료했을 때 뒤이어 완료할 수 있는 progress에 대해서 전부 꺼내줌4. 최종적으로 count를 answer에 push 해주면 됨function solution(progresses, speeds) { let answer = []; while (progresses.length ..
프로그래머스 괄호 회전하기 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/76502문제 풀이1. String.prototype.slice 메서드를 이용해 단어를 좌측으로 한 칸씩 이동하도록 구현2. 이동한 문자열이 올바른 괄호 문자열인지 판단하는 함수(isValid)를 통해 검사function isValid(value) { let stack = [value[0]]; for (let i = 1; i 결론올바른 괄호의 판단은 stack 자료구조를 이용해 최종적으로 stack이 비어있다면 올바른 괄호이다.
백준 1759 암호 만들기
·
코딩테스트/자료구조
링크 : https://www.acmicpc.net/problem/1759문제 설명더보기문제바로 어제 최백준 조교가 방 열쇠를 주머니에 넣은 채 깜빡하고 서울로 가 버리는 황당한 상황에 직면한 조교들은, 702호에 새로운 보안 시스템을 설치하기로 하였다. 이 보안 시스템은 열쇠가 아닌 암호로 동작하게 되어 있는 시스템이다.암호는 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성되어 있다고 알려져 있다. 또한 정렬된 문자열을 선호하는 조교들의 성향으로 미루어 보아 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것이라고 추측된다. 즉, abc는 가능성이 있는 암호이지만 bac는 그렇지 않다.새 보안 시스템에서 조교들이 암호로..