LeetCode Course Schedule || (JavaScript), 위상정렬
·
코딩테스트/LeetCode
링크 : https://leetcode.com/problems/course-schedule-ii/description/문제 설명더보기There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.For example, the pair [0, 1], indicates that to take course 0 you have to first take c..
프로그래머스 단속카메라 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42884문제 풀이겹치는 구간에 대해서 최소한의 카메라만 설치하도록 하는 로직을 구현해야 함.1. 끝나는 지점을 기준으로 오름차순으로 정렬2. 새로운 구간의 start(진입 지점), end(나간 지점)을 기준으로 현재 camera위치보다 크면 camera위치 수정 (count 1증가) 2번의 조건을 만족하지 않으면 겹치는 구간으로 camera의 위치가 변경되지 않음function solution(routes) { let count = 0; let camera = -Infinity; routes.sort((a, b) => a[1] - b[1]); for (co..
프로그래머스 [1차] 프렌즈4블록 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17679문제 풀이2x2 블록을 지우면서 지워진 블록의 총 갯수를 파악하는 문제로크게 3가지 부분으로 생각함1. (0, 0)부터 시작해 ↘, →, ↓ 방향에 (0, 0)이랑 같은 문자 인지 확인하는 로직2. (1번이 통과된다면) 겹쳐진 블록에 대해 중복 카운트를 방지하기위해 이미 블록이 사용된건지 판단하는 로직3. 카운트를 다 했으면 블록을 아래로 내리는 로직4. 반환된 total_count가 0이면 더 이상 지울 수 있는 블록이 없으므로 returncal_block 함수의 2x2 블록이 판단가능한지 부분 추가 설명- 중복 방지를 위해 사용한 블록을 체크한는 used_block 변수(set자료..
프로그래머스 햄버거 만들기 (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/42898 문제 풀이dp를 이용하여 문제 풀이방향은 오른쪽, 아래로만 이동이 가능하기에 해당 지점에서는 왼쪽, 위에서만 올 수 있음각 지점에는 해당 지점까지 온 경로의 수를 나타냄왼쪽, 위에서 올 수 있는 경로의 합을 MOD(1,000,000,007)로 나눈 나머지를 해당 지점에 저장하면 됨function solution(m, n, puddles) { const MOD = 1000000007; const map = Array.from({length: n}, () => Array(m).fill(0)); puddles.forEach(puddle => { map[..
프로그래머스 숫자 게임 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12987?language=javascript문제 풀이--- 틀린 풀이더보기B를 정렬하고 dict형태로 만들어서 비교를 했음.1. 더 큰 최소 값을 찾음(minKey)키가 있다면 answer + 1, map에서 key의 값을 1 제거 (1이라면 key를 제거) -> 비교할 갯수를 줄이기 위해2. 최소 값이 없다면 map에서 가장 작은 값 제거 문제점 (시간 초과 발생)1. map으로 설정한 key를 모두 돌아야 함2. map을 만들어야 함function solution(A, B) { let answer = 0; let Bmap = {}; B.sort((a, b) => a..
프로그래머스 단어 변환 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/43163문제 풀이bfs를 이용해 단어를 탐색하도록 로직을 작성했고, 정답을 발견했을 때 return 하도록 함changed를 이용해 중복으로 탐색을 하지 않도록 설정 (시간 복잡도 및 공간 복잡도를 낮추기 위해)function solution(begin, target, words) { if (!words.includes(target)) { return 0; } const length = begin.length; const queue = [[begin, 0]]; const changed = new Set([begin]); while (queu..
프로그래머스 체육복 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=javascript문제 풀이1. n + 1만큼 배열을 생성, 모든 값은 1로 설정 (1이상인 값은 체육복이 있다는 의미)2. lost를 돌면서 배열을 1감소 (체육복이 없으니 1을 빼줌)3. reserve를 돌면서 배열을 1증가 (여벌의 체육복이 존재하니 1을 증가)4. answer를 돌면서 값이 0 이면서 왼쪽/오른쪽 중 여벌의 체육복을 가진 학생이 존재하면 자신의 값 1증가, 여벌을 가지고 있던 학생 -1을 해줌5. 최종적으로 1이상의 값을 가진 길이에서 1을 빼주면 정답 (1을 빼는 이유는 처음에 n + 1만큼의 배열을 생성했기 때문)function soluti..
프로그래머스 대충 만든 자판 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/160586문제 풀이keymap에 대한 index정보를 dict 형태로 저장하여 관리 (최소 index를 기준으로 저장 해야 함)target 검사로직에 만약 keymaps에 해당하는 단어가 없다면 문자열을 만들 수 없으므로 count = -1로 지정function solution(keymap, targets) { var answer = []; let keymaps = {}; for (let km of keymap) { const key = km.split(''); for (let i = 0; i 결론keymap에 대한 최소 inde..
프로그래머스 숫자 변환하기 (JavaScript)
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/154538#문제 풀이dfs로 접근을 했다가 'Maximum call stack size exceeded' 오류가 발생더보기더보기더보기dfs문제풀이function solution(x, y, n) { var answer = Infinity; function dfs (value, count) { if (value > y || count > answer) return; if (value === y) { answer = Math.min(answer, count); return; } ..