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..
TS - interface
·
TypeScript
인터페이스는 여러가지 타입을 갖는 프로퍼티로 이루어진 새로운 타입을 정의하는 것과 유사하다. 앞으로 개발해나갈 코드에 대한 부분에 대해 미리 타입을 지정한다는 의미이다. 1. 인터페이스의 기본 사용법 // 예제 코드 interface User { name: string; age: number; } // 변수에 사용하는 경우 const userInfo: User = { name: 'hi', age: 32 }; // 함수의 매개변수에 사용하는 경우 function getUser(user: User) { console.log(user); } getUser(userInfo); 또한 함수의 기본 구조에 대한 인터페이스도 구축이 가능하다. // 함수 구조에 사용하는 경우 interface SumCalc { (a:n..
sort()의 사용법
·
TIL
기존의 나는 integer 타입의 데이터가 들어있는 배열에만 sort 메서드를 사용해왔었고, 어느새 오름차순, 내림차순 정렬만 기억하고 있었다. 하지만 알고리즘 문제를 풀던 중 문자열을 정렬해야 할 필요가 있었고 integer를 정렬할 때의 방식대로 오름차순, 내림차순을 통해 string 배열을 정렬했을 때 전혀 정렬이 되지 않은 모습을 확인할 수 있었다. 위의 코드를 보고 문자열을 정렬하기 위해선 처리해주는 방식이 달라야 한다는 것을 알게되었다. arr.sort([compareFunction]) 위의 구문에서 compareFunction을 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니 코드 코드 포인트 값에 따라 정렬된다. 유니코드가 정확하게 무엇인지는 알지 못하지만 sort()만 작성..
Leetcode 389. Find the Difference
·
Algorithm
You are given two strings s and t. String t is generated by random shuffling string s and then add one more letter at a random position. Return the letter that was added to t. 두 개의 문자열인 s와 t가 주어졌다. 문자열 t는 문자열 s에서 랜덤하게 하나의 문자가 추가된 것이다. 문자열 s에서 추가된 문자를 리턴하라. 두 문자열을 비교해 다른 문자를 찾아내는 문제였다. 문자열을 배열로 만들고 for문으로 순회하며 다른 값을 찾는다면 리턴하고자 했다. var findTheDifference = function(s, t) { if(!s) return t; const sA..
LeetCode 387. First Unique Character in a String
·
Algorithm
문자열이 지정되면 문자열에서 반복되지 않는 첫 번째 문자를 찾아 인덱스를 반환합니다. 존재하지 않으면 -1을 반환합니다. 반복문을 순회하며 중복이 아닌 경우를 찾아야 했다. Map이나 Set을 사용해 문제에 접근하는 방법도 떠올렸으나 훨씬 간단하고 쉬운 코드를 작성할 방법이 떠올랐다. 바로 lastIndexOf 메서드를 사용하는 방법이다. /** * @param {string} s * @return {number} */ var firstUniqChar = function(s) { for(let i =0; i < s.length; i++) { const coincideString = s.indexOf(s[i]) === s.lastIndexOf(s[i]); if(coincideString) { return..
Leetcode 374. Guess Number Higher or Lower
·
Algorithm
추측 게임에서 수를 맞추는 문제. 1부터 n까지 숫자를 골라 어떤 번호를 골랐는지 맞히는 문제다.사전 정의된 API intest(int num)를 호출하면 세 가지 가능한 결과가 리턴된다는 말이 있다.(문제를 풀 때 해당 부분을 인지하면 된다)-1: 내가 고른 숫자보다 너의 추측이 더 높을 때(= num > pick).1: 내가 뽑은 숫자보다 추측이 더 낮을 때(= num 0: 내가 선택한 숫자(즉, num == pick)와 추측이 같을 때. 처음엔 인자 n만을 사용해 문제를 해결하고자 했지만 시간 초과로 실패했다.// 시간 초과된 코드var guessNumber = function(n) { let lower = 1; let higher = n; while(lower 연산에 필요한..
Flux pattern
·
TIL
MVC pattern을 공부하며 리액트에도 MVC 패턴이 적용되는건지 서칭하던 중 Flux Pattern을 보고선 포스팅을 하게 됐다. Flux Pattern의 등장 계기 MVC pattern의 단점을 보완한 새로운 pattern MVC는 controller를 통해 model의 데이터를 조회, 갱신하고 view를 통해 최종적으로 화면에 그려내는 패턴을 지녔다. 규모가 작을 때는 상관이 없었지만, 크기가 큰 프로젝트를 진행 시 발생하는 문제점이 있었다. 프로젝트의 사이즈가 커질수록 데이터의 흐름을 파악하는 것이 힘들다는 것이다. 하나의 controller에 많은 view와 model이 연결되어져 컨트롤러의 크기가 커지게 되고 model 업데이트 -> view 업데이트 -> 다른 model 업데이트 -> 다..