728x90
반응형

자료구조 및 알고리즘/JavaScript Practice 131

[프로그래머스] 성격유형 검사하기

문제 설명 문제 분석각 지표는 두 가지 성격 유형으로 구성됩니다. (RT, CF, JM, AN)검사지(survey)와 선택지(choices) 배열이 주어집니다.choices는 1-7 사이의 값으로, 4를 기준으로 어느 성격 유형에 점수를 줄지 결정합니다.각 지표에서 점수가 같으면 사전순으로 빠른 유형이 선택됩니다. 첫 번째 접근: O(n) function solution(survey, choices) { const character = { RT: { R: 0, T: 0 }, CF: { C: 0, F: 0 }, JM: { J: 0, M: 0 }, AN: { A: 0, N: 0 }, } survey.forEach((el, i) => {..

[프로그래머스] 숫자 짝꿍

문제 설명 문제 분석두 정수 X, Y가 주어집니다.X, Y에서 공통으로 나타나는 숫자를 사용하여 만들 수 있는 가장 큰 정수를 찾아야 합니다.공통된 숫자가 없다면 "-1", 공통된 숫자로 0밖에 만들 수 없다면 "0"을 반환합니다. 첫 번째 접근:  O(n * m) function solution(X, Y) { let answer = '' let [xLength, yLength] = [X.length, Y.length] new Array(10).fill(0).forEach((_, i) => { X = X.replaceAll(9 - i, '') Y = Y.replaceAll(9 - i, '') const count1 = xLengt..

[프로그래머스] 체육복

문제 설명 문제 분석일부 학생들이 체육복을 도난당했습니다.여벌 체육복이 있는 학생이 도난당한 학생에게 체육복을 빌려줄 수 있습니다.학생들은 자신의 번호의 앞뒤 번호의 학생에게만 체육복을 빌려줄 수 있습니다.최대한 많은 학생이 체육 수업을 들을 수 있도록 해야 합니다. 첫 번째 접근: reduce() O(n * m) function solution(n, lost, reserve) { const duplication = lost.filter(el => reserve.includes(el)) lost = lost.filter(el => !duplication.includes(el)) .sort((a, b) => a - b) .map(el => [el - 1, ..

[프로그래머스] 햄버거 만들기

문제 설명 문제 분석햄버거 가게에서 일하는 상수는 정해진 순서(아래서부터 빵-야채-고기-빵)로 쌓인 햄버거를 포장해야 합니다.재료가 순서대로 들어올 때마다 햄버거를 만들 수 있는지 확인하고, 만들 수 있다면 포장합니다.ingredient 배열에는 1(빵), 2(야채), 3(고기)의 값이 담겨있습니다.상수가 포장할 수 있는 햄버거의 개수를 반환해야 합니다. 첫 번째 접근:  문자열 조작(O(n²) ) (시간 초과) function solution(ingredient) { const hamburger = '1231' let answer = 0 ingredient = ingredient.join('') while(ingredient.includes(hamburger)) { ..

[프로그래머스] 해시 - 완주하지 못한 선수

24년 12월 28일해결한 문제 갯수: 4 문제 설명  문제 분석마라톤에 참여한 선수들의 명단(participant)과 완주한 선수들의 명단(completion)이 주어집니다.단 한 명의 선수를 제외하고는 모든 선수가 완주했습니다.완주하지 못한 선수의 이름을 찾아야 합니다. 첫 번째 접근:  Array.splice() 사용 (시간 초과) function solution(participant, completion) { return completion.reduce((a, c) => { const idx = participant.indexOf(c) a.splice(idx, 1) return a }, participant)[0]}indexOf()와 splice()..

[프로그래머스] 로또의 최고 순위와 최저 순위

24년 12월 27일해결한 문제 갯수: 1 문제 설명 문제 분석로또 6/45는 1부터 45까지의 숫자 중 6개를 찍어 맞히는 대표적인 복권입니다. 알아볼 수 없는 번호(0)를 포함하여 민우가 구매한 로또 번호와 당첨 번호가 주어질 때, 당첨 가능한 최고 순위와 최저 순위를 리턴하는 문제입니다.제한사항 lottos는 길이 6인 정수 배열입니다.lottos의 모든 원소는 0 이상 45 이하인 정수입니다.0은 알아볼 수 없는 숫자를 의미합니다.win_nums는 길이 6인 정수 배열입니다. 첫 번째 접근: filter, includes O(n²)function solution(lottos, win_nums) { const correct = lottos.filter(el => win_nums.includes..

[프로그래머스] [1차] 다트 게임

24년 12월 26일해결한 문제 갯수: 3 문제 설명 문제 분석다트 게임은 총 3번의 기회로 구성됩니다.각 기회마다 0-10점을 얻을 수 있습니다.S, D, T는 각각 1제곱, 2제곱, 3제곱을 의미합니다.'*'는 해당 점수와 바로 전 점수를 2배로 만듭니다.'#'은 해당 점수를 마이너스로 만듭니다. 첫 번째 접근: reduce() (O(n))function solution(dartResult) { const bonus = { S: 1, D:2, T:3 } return Array.from(dartResult).reduce((answer, c) => { // 문자열을 한글자씩 처리 if(Number.isNaN(Number(c))) { if(bonus[c]) { ..

[프로그래머스] 과일 장수

24년 12월 24일해결한 문제 갯수: 5 문제 설명 문제 분석k: 최상품의 사과 점수m: 상자에 담길 수 있는 사과의 갯수score: 각 사과의 점수가 담긴 배열m개씩 담긴 사과 상자에서, (가장 낮은 사과 점수 * m)를 반환합니다.이익이 발생하지 않는 경우, 0을 return합니다. 첫 번째 접근: while (O(n))function solution(k, m, score) { score.sort((a, b) => b - a) let answer = 0 while(score.length >= m) { answer += score.slice(0, m)[m-1] * m score.splice(0, m) } return answer}sco..

[프로그래머스] 포켓몬

24년 12월 23일해결한 문제 갯수: 1 문제 설명 문제 분석 N마리의 폰켓몬 중에서 N/2마리를 선택합니다.최대한 많은 종류의 폰켓몬을 선택하는 것이 목표입니다.같은 종류의 폰켓몬은 같은 번호를 가집니다.nums의 길이는 1 이상 10,000 이하인 자연수이며, 항상 짝수입니다.폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수입니다.  접근: Set() (O(n))function solution(nums) { const set = new Set(nums) return nums.length / 2 nums.length : 총 포켓몬 수nums.length / 2 : 선택 가능한 수set.size : 포켓몬 종류 수결론: set.size가 더 큰 경우, 선택할 수 있는 포켓몬의 수가 ..

[프로그래머스] [1차] 비밀지도

24년 12월 21일해결한 문제 갯수: 5 문제 설명문제 분석지도는 한 변의 길이가 n인 정사각형 배열입니다.각각의 지도는 이진수로 암호화되어 있습니다.암호화된 배열은 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열입니다. 첫 번째 접근 : reduce() -   O(n²)function solution(n, arr1, arr2) { return arr1.reduce((answer, c, i) => { // 두 배열의 숫자를 이진수 문자열로 변환 let str1 = c.toString(2) let str2 = (arr2[i]).toString(2) // n자리 이진수로 맞추기 위해 ..

728x90
반응형