새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기

프로그래머스60

[프로그래머스] 입국심사 📖 문제 🧑🏻‍💻 풀이 과정 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) 문제 접근 및 이해 수학적으로 접근하였을때, 곱을 최대한 높은 값을 가지기 위해서는 숫자들 간 차이가 적을수록 높은 곱의 결과를 갖게 됩니다. 첫번째 조건에서 특정 개수의 숫자들의 합은 동일해야하므로, 곱의 결과만 높게 만들어주는 숫자들의 조합을 찾으면 됬습니다. 숫자들의 합을 숫자의 개수로 나누어 몫을 구하였습니다. 이로인해 모든 숫자들의 차이가 동일하도록 만들어주었습니다. 나머지가 발생하는 경우에는 숫자들을 순서대로 돌며 1씩 더해주어 숫자들간 차이를 최소로 만들어주었습니다. 2) 알고리즘 수학 3) 풀이 코드 사용 언어 - Python def solution(n, s): answer = [] num = s // n remain = s % n if not num: #.. 2022. 5. 12.
[프로그래머스] 파괴되지 않은 건물 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 적의 공격 또는 아군의 회복 스킬이 발동할때 마다 2차원 배열을 반복하며 값을 변경하는 방법은 2차원 배열을 너무 자주 반복하여 많은 시간이 소요됩니다. 2차원 배열을 반복을 줄여 효율성을 올리기 위하여, 누적합을 이용하였습니다. 스킬이 사용될때 2차원 배열을 반복하는것이 아니라 스킬의 영향이 미치는 영역의 4개의 모서리에 변화량을 기록하였습니다. 모든 스킬에 대한 변화량을 기록한 이후, 마지막에 2차원 배열을 반복하여 기록된 변화량에 따라 2차원 배열의 모든 좌표들의 값을 산정하였습니다. 2) 알고리즘 누적합 3) 풀이 코드 사용 언어 - Python def solution(board, skills): answer = 0 N = len(board) .. 2022. 5. 9.
[프로그래머스] 짝지어 제거하기 📖 문제 🧑🏻‍💻 풀이 과정 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) 문제 접근 및 이해 주어진 장르와 노래를 함께 반복시켜, 장르별로 노래를 모으고 총 재생시간을 기록하였습니다. 이후 장르별로 총 재생기간을 비교하여 가장 많이 재생된 장르순서대로 정렬하였습니다. 마지막으로 장르별로 가장 많이 재생된 노래를 2개씩 꺼내서 정답에 추가하였습니다. 2) 알고리즘 구현 3) 풀이 코드 사용 언어 - Python def solution(genres, plays): genre_dict = {} # 장르별 플레이 리스트, 장르: {플레이리스트, 총 플레이 시간} genre_plays = [] # 장르별 총 플레이 시간 answer = [] # 정답 리스트 for idx in range(len(genres)): # 입력으로 주어지는 모든 장르들 반복 .. 2022. 5. 4.
[프로그래머스] 가사 검색 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 접근 및 이해 초기에 문제를 접하였을때, 가사를 하나씩 반복하며 나올 수 있는 모든 경우의 수를 키로 만들어서 카운트 하였습니다. 그러나 효율성의 5개 중 3개만 통과하고 2개를 통과하지 못하였습니다. Trie(트라이) 라는 자료 구조를 알게 되어, 딕셔너리를 이용하여 만들었습니다. 물음표가 앞 또는 뒤에서만 나오기 때문에 앞과 뒤를 저장해두는 두개의 딕셔너리를 생성하였습니다. 각 딕셔너리의 최상단에는 글자 수를 키로 가지는 딕셔너리입니다. 글자 수 안에는 내부에 다음 글자를 키로 가지는 딕셔너리가 존재하게 됩니다. 2) 알고리즘 Trie 3) 풀이 코드 사용 언어 - Python def solution(words, queries): start = {} # 앞에 ?.. 2022. 5. 3.