JavaScript/알고리즘 90

프로그래머스 같은 숫자는 싫어 JS (for문 / 스택 이용하기)

🧷 링크 문제 설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 🙋‍♀️ 내 생각 스택 / 큐를 공부하면서, 실제 코드로도 연습하고 싶어서 풀어본 문제이다. 프로그래머..

프로그래머스 정수 내림차순으로 배치하기 JS ( sort()와 리액트 불변성유지 )

🧷 링크 문제 설명 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 🙋‍♀️ 내 생각 문제를 보고 숫자를 거꾸로 뒤집기위해서 sort()를 써야겠다고 생각했다. 매개변수 n은 숫자이다. 그런데 sort()는 배열에만 사용할 수 있는 메서드이다. 그래서 sort()를 사용하기 위해서는 형변환이 먼저 이루어져야한다. 이 문제는 sort()메서드만 안다면, 풀기 어렵지 않은 문제이다. 다만, sort()를 사용하고 다시 결괏값을 숫자로 변환하는 등의 여러번의 형변환을 거치는 과정을 잘 생각해야한다. ✅ 내 코드 function solution(n) { return ..

프로그래머스 문자열 내 p와 y의 개수 JS ( split()으로 특정 문자열 몇개 포함하는지 구하기 )

🧷 링크 문제 설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다. 🙋‍♀️ 내 생각 대/소문자 구분이 없다는 가정이 있기때문에, 대문자나 소문자 하나로 통일하고 시작해야겠다고 생각했다. 'p'나 'y'를 얼마나 가지고 있는지는 filter()를 통해 조건을 거리고 length를 이용해서 길이를 구한다음, 비교한다. ✅ 내 코드 func..

프로그래머스 서울에서 김서방 찾기 JS ( findIndex(), indexOf(), 템플릿문자열 )

🧷 링크 문제 설명 String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다. 🙋‍♀️ 내 생각 타입이 array인 seoul안에서 "Kim"이 몇번째에 위치하는지를 찾는 문제이다. array에서 특정 문자열의 index를 찾을 때 사용하는 메서드만 알면 풀기 쉬운 문제이다. ✅ 내 코드 function solution(seoul) { let location = seoul.findIndex(v=>v==="Kim") return `김서방은 ${location}에 있다` } 몇번째에 있는지 그 index만을 리턴하는 ..

프로그래머스 제일 작은 수 제거하기 JS ( findIndex(), splice() )

🧷링크 문제 설명 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. 🙋‍♀️ 내 생각 처음에 문제를 잘못생각해서 코드를 짜서 패쓰가 안되었는데, 잘못 생각한 이유는 아래와 같다. ❌ 잘못 생각한 코드 const arr2 = [...arr] arr2.sort((a,b)=>b-a).pop() return arr2.length ? arr2 : [-1] sort()를 이용해서 arr안에 들어있는 값들을 내림차순으로 정렬한 뒤, pop()을 통해 가장 마지막 값을 제거했다..

프로그래머스 두 정수 사이의 합 JS ( for문 / 가우스 합계)

🧷링크 문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 🙋‍♀️ 내 생각 a===b인 경우는 둘중 아무 수나 리턴하면 되기때문에 생각하기 어렵지 않다. a와 b사이의 값들을 더하기 위해서, for문을 사용해서 a와 b 사이라는 범위를 지정하고 그 안에서 1씩 더하거나 빼는을 써야겠다고 생각했다. (a=3, b=5이면 3부터 시작해서 5까지(범위), 3,4,5처럼 1차이 나게) 그런데 a가 더 클 경우와, b가 클 경우로 나뉘기 때문에 a===b일 경우를 제외하고는 a>b, b>a로 경우를 나누어서 어디부터 시작해서, 더할지 뺄지를 ..

프로그래머스 자연수 뒤집어 배열로 만들기 JS

문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 🙋‍♀️ 내 생각 숫자를 하나하나 쪼개면서 배열에 담기위해서 split()을 사용해야겠다고 생각했다. split()은 string타입에 사용가능하므로 우선 타입을 string으로 만들어야한다. 그러고나서 split으로 쪼개면서 배열에 값을 하나하나 담고, 타입을 다시 number로 변경한 뒤, reverse()을 통해서 배열의 순서를 반대로 바꾼다. ✅ 내 코드 function solution(n) { return n.toString().split('').map(v=>Number(v)).reverse() } 우선, tostring()을 통해서 n의 값들을..

프로그래머스 x만큼 간격이 있는 n개의 숫자 JS

문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 🙋‍♀️ 내 생각 최종적으로 반환하는 answer이 배열이기때문에 빈배열을 먼저 만들고, 그 안에 push로 값을 담아야겠다고 생각했다. x씩 증가하는 값을 반복하므로 for반복문을 사용했다. ✅ 내 코드 const solution = (x,n) => { let arr =[] for(i=x; arr.lengthn일때까지만 i에 x를 더해가면서 arr에 i를 push하고 범위를 벗어나면 바로 for문을 빠져나온다. return arr를 통해서 arr를 리턴한다. 💻 다른사람 코드중에 ..

프로그래머스 나머지가 1이 되는 수 찾기 JS

문제 설명 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 🙋‍♀️ 내 생각 나머지 1인 수를 일일이 검사를 해야 알 수 있기때문에, 반복문을 통해서 검사를 해야겠다고 생각했다. 나는 for문을 사용해서 수를 검사했다. 그리고 나머지가 1이 되는 수 중에서 가장 작은수를 찾아야하므로, 범위는 작은수를 기준으로 더해나가면서 검사를 하는 식으로 코드를 짰다. (불필요하게 검사하는 값이 적어지도록 하기 위해서) n을 나눈 나머지가 1인 수를 구하는 것이고 n의 범위가 3부터 시작되므로 찾으려는 값 x의 범위에서 0과 1은 제외했다. ✅ 내 코드 function..

프로그래머스 가운데 글자 가져오기 JS

문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 🙋‍♀️ 내 생각 s의 길이가 홀수인 경우와 짝수인 경우가 리턴되는 문자열의 길이가 다르다. 홀수인경우에는 가운데 하나의 문자열만을, 짝수인 경우에는 가운데 두개의 문자열을 리턴한다. 따라서 가장먼저 s가 홀수인지 짝수인지 경우를 나눠야겠다고 생각했다. 또한, 문자열도 배열처럼 index를 이용해서 값에 접근할 수 있는 성질을 이용해서 해당값을 추출하였다. (접근만 가능하고 수정은 불가- 문자열은 불변한 데이터타입이므로) ✅ 내 코드 function solution(s) { if(s.length%2!==0){ return s[Math.floor(s.length/2..