알고리즘 문제풀이/JavaScript8 [프로그래머스] 입국심사 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 특정 시간 내에 인원을 모두 심사가 가능한지 여부 판별을 위해 이분 탐색을 이용하였습니다. 시간을 기준으로 필요한 최소 시간과 최대 시간을 우선적으로 구한 이후, 최소 시간을 탐색했습니다. 중간 시간을 적용하여 n명 이상 심사가 가능하면, 더 적은 시간으로 가능한지 탐색하였습니다. n명 심사가 불가능하다면, 더 많은 시간을 적용하여 탐색하였습니다. 2) 알고리즘 이분탐색 3) 풀이 코드 사용 언어 - JavaScript function solution(n, times) { let answer = 0 // 정답 변수 let min_time = 1 // 심사를 모두 마치는 최소 시간 let max_time = n * Math.max(...times) //.. 2022. 5. 27. [프로그래머스] 추석트래픽 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 입력으로 들어온 문자열 형태의 시간 정보를 서로 계산하기 쉽게 하기 위하여 밀리초로 변경하였습니다. 변경된 밀리초를 하나의 객체의 키값으로 저장하였고, 시작시간인 경우 +1 을, 종료 시간인 경우 -1 을 연산하였습니다. 이후 객체의 키들을 오름차순으로 정렬하였고, 키값들을 순환하며 초당 최대 처리량을 구하였습니다. 2) 알고리즘 문자열 3) 풀이 코드 사용 언어 - JavaScript function solution(lines) { let answer = 0 // 정답 const timeline = {} // 타임라인을 저장할 객체 lines.map(v => v.split(' ')).forEach(v => { const hour = parseInt(.. 2022. 5. 24. [프로그래머스] 단어 변환 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 해당 조건을 만족하면서 재귀를 이용하여 완전탐색으로 접근하였습니다. 2) 알고리즘 완전탐색 재귀 3) 풀이 코드 사용 언어 - JavaScript function solution(begin, target, words) { let answer = 1e10 // 최솟값을 구해야하므로 초기에 가장 높은 값으로 초기화 const N = words.length // 변환 가능한 단어의 개수 const visited = Array(N).fill(false) // 해당 단어로 변환을 했었는지 확인을 위함 function sol(n, now, ans) { // 남은 변환 가능 단어 개수, 현재 단어, 변경한 횟수 if (now === target) { // 타겟과 .. 2022. 5. 13. [프로그래머스] 짝지어 제거하기 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 인접한 두개의 문자가 동일한지 판별하여, 동일한 경우 두개를 제거하는 방식이였습니다. 인접한 두개의 문자를 비교하기 위하여 스택을 이용하였습니다. 2) 알고리즘 스택 3) 풀이 코드 사용 언어 - JavaScript function solution(s) { let stack = [] // 문자열 하나하나 저장할 스택 Array.from(s).forEach(v => { // 문자열을 배열로 변경하여 알파벳 하나씩 반복 if (stack.length === 0) { // 스택이 비어있으면, 문자 추가 stack.push(v) } else if (stack[stack.length-1] === v) { // 스택의 가장 최근 값이 현재 문자랑 동일하면, 짝지.. 2022. 5. 9. [프로그래머스] 네트워크 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 각 컴퓨터를 반복하면서 DFS 탐색을 하여 연결 관계를 확인하였습니다. 컴퓨터를 반복하던 중 이미 네트워크가 속한것을 확인한 경우, 건너뛰며 아직 속하지 않은 컴퓨터들을 탐색하며 네트워크 개수를 확인하였습니다. 2) 알고리즘 DFS 3) 풀이 코드 사용 언어 - JavaScript function solution(n, computers) { let answer = 0 // 정답 변수 let visited = Array(n).fill(0) // 각 노드의 방문 여부를 저장 let linked = Array(n).fill(0).map(() => []) // 각 노드별 연결 관계 (2차원 배열) function dfs(start) { // DFS 탐색 le.. 2022. 5. 5. [프로그래머스] 타겟 넘버 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 DFS 탐색을 실시하여, 각 숫자를 더하거나 빼면서 재귀로 탐색하였습니다. 2) 알고리즘 DFS 재귀 3) 풀이 코드 사용 언어 - JavaScript function solution(numbers, target) { let answer = 0 // 정답 변수 function dfs(n, ans) { // dfs 탐색 함수 if (n >= numbers.length) { // numbers 길이만큼 탐색 했다면 if (ans === target) { // 현재까지 정답이 타겟 숫자와 동일하면 answer++ // 정답 증가 } return } dfs(n + 1, ans + numbers[n]) // 현재 숫자를 더하기 dfs(n + 1, ans - n.. 2022. 5. 5. [프로그래머스] 오픈채팅방 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 유저들의 기록에 대해서 forEach 를 이용하여 입장과 퇴장, 이름 변경에 대해 구분하여 로직을 수행하였습니다. 유저 아이디를 키값으로 갖고, 유저 이름을 값으로 하는 객체를 생성하여 관리하였습니다. 이후 로그를 map 을 이용하여 반복하였고, 유저 아이디를 유저 이름으로 변경하였습니다. 2) 알고리즘 문자열 3) 풀이 코드 사용 언어 - JavaScript function solution(record) { let answer = []; // 정답 리스트 let logs = []; // 들어가거나 나간 로그 기록들 let user = {}; // 유저 아이디 정보, 유저아이디: 이름 record.forEach(v => { let splited = v.. 2022. 5. 5. [프로그래머스] 기능개발 📖 문제 🧑🏻💻 풀이 과정 1) 문제 접근 및 이해 가장 앞에 있는 작업이 종료 되어야 이후 작업들도 순서대로 배포가 가능하므로, shift 를 이용하였습니다. shift 를 이용하여 앞의 작업부터 순서대로 확인을 하며 진행 시키고, 작업 진행도를 추가시킨 후 push 를 이용하여 뒤에 추가하는 방식을 이용하였습니다. 2) 알고리즘 큐 3) 풀이 코드 사용 언어 - JavaScript function solution(progresses, speeds) { let answer = [] // 정답 배열 let taskIdx = 0 // 가장 앞에 있는 작업의 인덱스 let progress = progresses.map((v, i) => [v, i]) // 프로세스 내역들을 인덱스와 함께 저장 while (.. 2022. 5. 4. 이전 1 다음