알고리즘 풀이 중 오랜만에 경험한 기초 지식
·
JS & REACT
Leetcode - 2696. Minimum String Length After Removing Substrings문제를 풀 때 경험했던 문제입니다.당시 저는 문자열에 특정 키워드가 존재하는지에 대한 조건을변수에 할당해 사용하려 했는데, 계속 반복문에서 타임아웃이 발생했습니다.아무리 생각해봐도 문제가 변수 할당밖에 없어 변수에 할당한 조건문을 while문에 직접 추가했더니그제서야 동작하는 것을 확인했는데요.왜 이런 일이 발생하는걸까? 하자마자 바로 잘못을 깨달았습니다.문제 발생 코드var minLength = function(s) { // const hasAB = s.includes('AB'); // const hasCD = s.includes('CD'); while(s.includes(..
LEETCODE 1624. Largest Substring Between Two Equal Characters
·
Algorithm
오늘 알고리즘은 의아했습니다.물론 제가 개념을 완벽히 몰라서 이해하지 못한거겠지만 말이죠.문제 설명주어진 문자열에서 같은 두 문자 사이에 있는 문자열의 길이를 리턴하는 문제였습니다.같은 두 문자열이 없다면 -1을 리턴하고!첫번째 답안/** * @param {string} s * @return {number} */var maxLengthBetweenEqualCharacters = function(s) { let num = -1; for(let i=0; i보이..십니까?저는 해당 코드를 작성하고 무조건 됐다! 라고 생각했습니다.하지만 테스트 결과 Wrong Answer를 보게 되었는데요.같은 두 문자가 존재할 땐 테스트 케이스가 pass지만,중복되어지는 문자가 없을 땐 문자열의 끝에 있는 알..
LEETCODE 908. Smallest Range I
·
Algorithm
/** * @param {number[]} nums * @param {number} k * @return {number} */var smallestRangeI = function(nums, k) { if(nums.length === 1) return 0; const min = Math.min(...nums); const max = Math.max(...nums); return Math.max(0, max-min-2*k); }; 풀이 과정max-min 의 현재는 10인데 k를 사용해 8로 만들어야했다.1차 답으로 max-min-k-2로 값을 구하려고 했으나 오답이었고,2차 답으로 max-min-2*k로 값을 구하려고 했으나 음수가 나오게 되며 오답이었다.2차 답에서 ..
Leetcode 682. Baseball Game
·
Algorithm
제공되는 문자열을 받아 배열의 요소를 모두 더한 값을 리턴하는 문제. 문제 자체는 쉬웠지만 string type의 배열 요소를 number로 변환해주는 작업이 필요했다. 메서드를 사용해 형변환을 해주는 건 불필요하다 생각해 자바스크립트의 특징인 암묵적 형변환을 통해 해결할 수 있었다. * Answer /** * @param {string[]} operations * @return {number} */ var calPoints = function(operations) { const ops = operations; let arr = []; for(let i=0; i number type 변환이 필요. JS의 암묵적 형변환 사용. arr.push(+ops[i]); } } // 완성된 배열을 모두 합산하기 위한..
Leetcode 482. License Key Formatting
·
Algorithm
대문자 문자열 사이에 대시가 들어간 라이센스 키를 변환하는 문제. 접근 방법 1. 새로운 문자로 변환을 위해 기존 문자열을 합치고 대문자로 만들었다. (=마지막에 대문자 처리를 해줘도 된다.) 2. for문을 역순으로 순회했는데, 해당 문자열의 length가 얼마나 길지 예상이 안될 땐 맨 끝의 index를 활용하기보단 확실하게 존재하는 맨 앞의 index를 활용하는 편이 좋다고 판단해 역순 조회를 실시했다. 3. for문 내부조건 중 i와 dashPosition의 값이 일치한다는 조건만 부여했을 때는 대시가 끝까지 붙게된다. for문 역순회를 했기에 reverse()를 적용했을 때 대시가 문자열 맨 앞에 붙게되는 것을 막기 위해 i !== 0이라는 추가조건을 걸었다. 4. 대시가 필요한 부분의 leng..
Leetcode 461. Hamming Distance
·
Algorithm
두 정수 사이의 해밍 거리는 해당 비트가 다른 위치의 수이다. 두 개의 정수 x와 y가 주어지면 두 정수 사이의 해밍 거리를 반환해줘야 한다. 해밍 거리란? 블록 부호 이론에서, 해밍 거리(Hamming distance)는 곱집합 위에 정의되는 거리 함수이다. 대략, 같은 길이의 두 문자열에서, 같은 위치에서 서로 다른 기호들이 몇 개인지를 센다. 예시 Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 위 화살표는 해당 비트가 다른 위치를 가리킨다. 문제 접근 방법 예시를 참조했을 때, 숫자를 2진법으로 처리가 필요해보였고 또한 비트가 언급된 걸로 보아서 비트연산자를 활용하면 되겠거니 싶었다. 0을 기점으로 서로 1이 나오는 거..
Leetcode 414. Third Maximum Number
·
Algorithm
정수 배열 번호가 지정되면 이 배열에서세 번째 고유한 최대 숫자를 반환한다.세 번째 최대값이 존재하지 않으면 최대값을 반환한다.문제 접근배열의 length에 따라 return값이 달라진다는 의미였다.예제를 봤을 때 배열 내 중복되는 수가 있으므로Set을 활용해 중복을 제거하였고 배열에서 세 번째 최대값이라는 키워드가 있어sort를 통한 정렬로 값을 추려내고자 했다. 처음엔 오름차순으로 코드를 전개했으나idx 처리가 까다로워 내림차순으로 변경해 코드를 전개했다./** * @param {number[]} nums * @return {number} */var thirdMax = function(nums) { const sort = nums.sort((a,b)=> b-a); const set = ne..
Leetcode 409. Longest Palindrome
·
Algorithm
소문자 또는 대문자로 구성된 문자열이 주어지면 해당 문자로 작성할 수 있는 가장 긴 회문의 길이를 반환한다. 회문이란 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열을 뜻한다 문자는 대소문자를 구분하는데, 예를 들어, "Aa"는 여기서 회문으로 간주되지 않는다. 접근 방법 처음엔 회문을 완성하는 것에 집중하고 문제를 접근했으나 회문의 length에 접근하는 것이 문제에서 요구하는 결과에 가까워지는 방법이란 것을 알았다. 문제를 해결 후 다시 생각을 해봤을 때 회문은 한 가지 방식으로 고정되어있는 것이 아니기에 애초에 회문을 만드는 방식으로 접근하는게 아녔다. 반복되는 문자를 처리하기 위해 예문을 확인해봤을 때 Input: s = "abccccdd" Output: 7 Explanatio..