알고리즘문제 38

프로그래머스 > 옹알이(2)(JS)

1. 해당 주어진 배열속에서 각 단어 속에서 조합해서 만들 수 있는 단어를 찾아줘야했다. 그래서 해당 단어를 splice를 통해 분리해주었다. 2. 분리된 단어가 옹알이 이면서, 이전에 연속된 옹알이가 아니라면 통과 되도록 반복문을 반복했다. 3. 그리고 해당 단어가 끝날 때까지 동일 하다면, 그 때 count를 하나씩 높여줬다. function solution(babbling) { const babblings = ["aya", "ye", "woo", "ma"]; let count = 0; babbling.forEach((word) => { babyContent(word) ? count++ : ''; }); function babyContent (word) { let babyWords = word.spl..

알고리즘문제 2022.12.02

프로그래머스 > 과일 장수(JS)

score라는 과일을 모아놓고, m 사과 상자를 만들어 판매했을 때, 최대이익을 얻을 수 있도록 반환해야 한다. 상자에서 가장 값싼 값의 사과를 m 만큼 곱해서 과일 장수가 얻을 수 있는 최대 이익을 반환해야 한다. 여기서 k의 역할은 그렇게 중요하지 않아 보인다. 왜냐면 값싼 사과를 순서대로 사과박스에 담고, m의 사이즈보다 작다면 이전까지 만든 사과박스를 반환하고, 그렇지 않다면, 해당 박스에 최하위의 사과를 m만큼 곱해서 반환하면 되기 때문에, k를 활용하지 못했다. function solution(k, m, score) { let count = 0; const expensiveAppleSort = score.sort((a, b) => b - a); let secondSlice = m; let fi..

알고리즘문제 2022.12.01

프로그래머스 > 콜라문제(JS)

처음 문제에 접근했을 때는, 콜라를 나눈 값을 변수에 담고, 해당 변수를 a로 바꿔가면서 count에 나눈 값 * b를 할당했지만 실패.. 생각해보니 슈퍼에서 바꾼 콜라도 내가 먹고 또 바꿀 수 있는 부분을 빼먹었다. 그래서 coke에 기존에 coke - 가게에 판 콜라 + 가게에서 얻은 콜라를 넣고 while 반복문을 통해 결과에 도달했다. function solution(a, b, n) { let count = 0; let coke = n; while (coke >= a) { let changeCoke = Math.floor(coke / a); count += changeCoke * b; coke = coke - changeCoke * a + changeCoke * b; } return count; }

알고리즘문제 2022.11.30

프로그래머스 > [1차]캐시(JS)

1. 이 문제는 이해가 안되서 다른 사람이 푼 풀이를 바탕으로 이해하면서 다시 풀었다. 2. 핵심은 큐와 스택으로 문제를 풀었어야 했다. function solution(cacheSize, cities) { let count = 0 ; let cityArray = []; cities.forEach((el) => { let currentCity = el.toLowerCase(); // 소문자로 통일 let isFindCity = cityArray.find((city) => city === currentCity); //새로운 배열인 cityArray에 해당 city가 있는지 판단 if (!isFindCity) { cityArray.push(currentCity); if (cityArray.length > c..

알고리즘문제 2022.11.13

[JS]프로그래머스 - 멀리 뛰기

1. 문제를 봤을 때 피보나치 수열이란 생각이 들었다. 그래서 피보나치수열로 처음에 실행했을 때, 시간초과가 발생 2. 그래서 for문을 통해 O(n)으로 시간복잡도를 바꿔서 진행했다. 하지만 newArray[n] % 1234567로 했을 때 실패가 발생했다. 3. 그래서 피보나치를 통해 newArray에 push할 때 나눠서 넣어줬더니 성공 function solution(n) { function fibonacci(n) { const newArray = [0, 1, 2]; for (let i = 3; i

알고리즘문제 2022.11.07

프로그래머스 > 튜플

function solution(s) { const tempArray = []; const takeOutString = ['{', '}', ',']; //숫자만 찾아주기 위해서 빼야할 {, }, , 각 문자열을 변수명에 배열로 만들어줬다. let tempString = ''; for (let i = 0; i < s.length; i++) { if (takeOutString.includes(s[i]) && tempString) { tempArray.push(tempString); tempString = ''; } if (!takeOutString.includes(s[i])) { tempString += s[i]; } } const tupleObject = {}; tempArray.forEach((el) =..

알고리즘문제 2022.11.04

프로그래머스 > 프린터

function solution(priorities, location) { const answer = []; const waitList = priorities.map((x, i) => [x, i]); //i를 통해 location위치를 반환시켜주기 위해 배열로 만들어준다. while (waitList.length) { const front = waitList.shift(); //큐처럼 앞에서 빼준다. if (front[0] >= Math.max(...waitList.map(x => x[0]))) { //만약 Math.max로 큰 숫자보다 큰게 있다면 answer에 담아준다. front[1]을 넣어주는 이유는 //index는 여기서 고유하게 쓰일 수 있다. answer.push(front[1]); if (..

알고리즘문제 2022.11.02

프로그래머스 > 기능개발

처음 원래 코드로 했을 때 사실 따른 엣지케이스도 통과를 해서 당연히 통과가 될 줄 알았다. 하지만 for문을 돌면서 마지막 숫자가 undefined일 때 부분이 조금 걸렸었는데 그 부분에서 다른 케이스가 통과가 되지 않은 것 같다. 그래서 직접 배열에 count를 할당해주는 방식으로 진행했다. 원래 코드 function solution(progresses, speeds) { const arr = []; let count = 1; progresses.forEach((el, i) => { const temp = 100 - el; while (true) { if (speeds[i] * count >= temp) { arr.push(count); count = 1; return; } count++; } });..

알고리즘문제 2022.11.01

프로그래머스 > H-Index

function solution(citations) { let resultArr = citations.sort((a, b) => b - a); let count = 0; resultArr.forEach((el, i) => { if (i < el) { count++; } }); return count; } 1. 논문 횟수의 인용횟수 citations[i]가 자신보다 인용횟수가 많은 논문 수i 보다 많으면 count를 증가시켜줬다. 2. citations기준으로 내림차순으로 정렬 후, i 번째에 해당하는 지수가 i가 되면 h-index = i가 되는 것이다. 3. 그래서 i < citations[i]로, 자신보다 인용횟수가 많은 논문 수와 같아 질 때의 count를 return해주면 된다. 4. 사실 문제에..

알고리즘문제 2022.10.31
반응형