JavaScript/알고리즘 90

프로그래머스 간단한 식 계산하기 JS ("연산자"처리하기, if문/switch문/객체 이용하기, eval()은 ❌)

문제 설명 문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요. 🙋‍♀️ 내 생각 이 문제의 핵심은 가운데 위치하고 있는 연산자를 어떻게 처리할 것인가라고 생각했다. 공백을 기준으로 하여 각각의 값을 구분하고 나누는것은 어렵지 않은데, 연산자도 문자열로 바뀌기때문에 string타입의 연산자를 어떻게해야 연산의 기능을 수행하도록 만들것인가를 생각하는 문제이다. split(' ')을 통해서 공백을 기준으로 값을 구분하고, 배열에 담으면 아래와 같이 나온다. 숫자는 String을 Number타입으로 변환해..

프로그래머스 배열 만들기 2 JS ( /^[패턴]+$/, 정규식으로 숫자를 찾으려면 String으로 타입변환 )

문제 설명 정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요. 만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다. 🙋‍♀️ 내 생각 0과 5로만 이루어진 정수를 어떻게 찾을것인가가 이 문제의 핵심이라고 생각했다. 5와 0이 들어가더라도 그 외의 값을 포함하고 있으면 안되기 때문에 그것을 어떤식으로 검사할 것인지가 중요한 것같다. 나는 정규식을 이용해서 찾을값을 지정하여 문제를 해결했다. ✅ 내 코드 function solution(l, r) { const result = []; for (let i = l; i

프로그래머스 0떼기 JS ( /^0/.test()-0으로 시작하는지? / slice(1)로 맨앞하나만제거 / number는 맨앞의 0이 JS 제거되는 특징 )

문제 설명 정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요. 🙋‍♀️ 내생각 보자마자 startsWith()가 생각이 났었지만, 0이 여러번 나올경우를 처리하는것이 어려워서 다른 방법을 생각하게 되었다. startsWith()는 정확히 일치하는 문자열이나 패턴으로 시작하기 때문에 이 문제를 풀기위해서 적절한 메서드는 아니었다. 그래서 그 다음으로 생각한 방법은 그럼 정규식을 이용해서 0이 몇개라도 상관없게만드는 것이었다. ✅ 내 코드 function solution(n_str) { while (/^0/.test(n_str)) { n_str = n_str.slice(1); } return n..

프로그래머스 홀수vs짝수 JS (reduce() / map()을 통해서 바로 합구하기)

문제 설명 정수 리스트 num_list가 주어집니다. 가장 첫 번째 원소를 1번 원소라고 할 때, 홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return 하도록 solution 함수를 완성해주세요. 두 값이 같을 경우 그 값을 return합니다. ✅ 내 코드 function solution(num_list) { const even =[] const odd =[] num_list.map((num,i)=>i%2===0?odd.push(num):even.push(num)) const evenSum = even.reduce((acc,cur)=>acc+cur) const oddSum =odd.reduce((acc,cur)=>acc+cur) return Math.max(evenSum,oddSum)..

프로그래머스 배열 비교하기 JS ( if문,reduce() )

문제 설명 이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다. 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다. 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다 두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요. ✅ 내 코드 function solution(arr1, arr2) { const arr1Sum = arr1.reduce((acc, cur) => acc + cur, 0); const arr2Sum = arr2.reduce((acc, cur) => ..

프로그래머스 문자열 곱하기 JS ( repeat()- 문자열반복 )

문제 설명 문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요. ✅ 내 코드 function solution(my_string, k) { return my_string.repeat(k) } 문자열을 반복하는 자바스크립트의 메서드가 있을것같아서 찾아보니까 repeat()이 있었다. repeat메서드는 이 문제를 풀면서 처음 접해서 공부해보았다. 메서드를 이용하면 쉽게 풀 수 있지만 for문을 이용해서도 풀 수 있다 function solution(my_string, k) { let answer = ''; for(let i = 0; i

프로그래머스 컨트롤 제트 JS (while문을 통해 findIndex()여러번 처리 / 빈배열이 호출되면 에러가 나는 reduce() )

문제 설명 숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요. 🙋‍♀️ 내 생각 보고 바로 reduce를 이용해서 값을 더해야겠다는 생각이 들었다. 문제는 Z가 있으면 바로 앞의 숫자를 빼는것을 어떻게 처리할 것인가였다. 생각나는 방법은 두가지였는데, 1️⃣Z를 바로 앞의값의 -인값으로 치환 2️⃣ Z가 있으면 바로 앞의 값과 Z를제거 였다. 둘다 인덱스로 바로 앞의 값에 접근하는것은 같다. 나는 둘중에 2️⃣번방법으로 문제를 풀었다. ✅ 내 코드 funct..

프로그래머스 공백으로 구분하기 2 JS ( split(" ")의 성질 2가지 )

문제 설명 단어가 공백 한 개 이상으로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요. 🙋‍♀️ 내 생각 이 문제는 split()메서드에 대한 이해도가 있다면 금방 풀수있는 문제이다. split()이 구분자를 기준으로 문자열을 나누기 때문에, 구분을 하면서 공백을 제거할수가 있다. 하지만 이 문제를 풀면서 생각보다 split()에 여러가지 성질이 있고, 그래서 활용할때 주의해야겠다는 생각이 들었다. 문제를 해결하다보니 이런 세세한것들을 깨닫고 공부했다. mdn문서와 일일이 실험하면서 파악한 속성들을 정리한 것이기때문에 정확하지 않은 정보가 포함되어있을 수도 있다..

프로그래머스 문자열 바꿔서 찾기 JS ( 값의 대치를 위해 map()사용하기 )

문제 설명 문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요. ✅ 내 코드 function solution(myString, pat) { return myString .split("") .map((a) => (a === "A" ? "B" : "A")) .join("") .includes(pat) ? 1 : 0; } 이 문제는 A ➡️ B 로, B ➡️ A로 바꿀때 어떻게해야 A로 바뀐 B가 다시 A가 되지 않으면서 새로운 값으로 대치할 수 있는지가 핵심인것 같다. 처음에는 replace()를 생각했..

프로그래머스 특정한 문자를 대문자로 바꾸기 JS (정규식 생성자와 replace(), replaceAll() )

문제 설명 영소문자로 이루어진 문자열 my_string과 영소문자 1글자로 이루어진 문자열 alp가 매개변수로 주어질 때, my_string에서 alp에 해당하는 모든 글자를 대문자로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요. ✅ 내 코드 function solution(my_string, alp) { const reg = new RegExp(alp, 'g') return my_string.replace(reg,alp.toUpperCase()) } my_string에서 alp만 찾아서 대문자로 바꾸는 문제이다. 우선 찾아서 바꾸기 위해 replace()가 가장 먼저 떠올랐다. 이 문제에서는 고정된 값이 아닌 매개변수 alp를 자바스크립트로 표현할수 있는가가 제일 중요한 문제인..