https://leetcode.com/problems/group-anagrams/description/1. 문제분석문자열 0~100자 1~10,000개 strs[] -> 아나그램을 그룹핑 (순서무관) -> 아나그램은, 순서 무관하게 동일한 문자로 이루어진 문자열2. 풀어보기[eat,tea,tan,ate,nat,bat] -> [[bat],[tan,nat],[eat,tea,ate]]3. 슈도코드string_by_anagram{} 맵을 만들어서-> strs[] 돌려서 -> 각 str 알파벳을 정렬해서 -> 그걸 키로, str을 값으로 담고-> 이거를 values만 추출해서 -> 배열로 묶어서 리턴4. 구현코드const groupAnagrams = (strs: string[]): string[][] => { ..
https://leetcode.com/problems/valid-palindrome/description/1. 문제분석길이 1~200,000 문자열 s -> 영문+숫자 이외 무시, 대소문자 무시 -> 뒤집어도 같으면 true, 아니면 false2. 풀어보기A man, a plan, a canal: Panama-> amanaplanacanalpanama -> 뒤집으면 amanaplanacanalpanama -> 같으니 true3. 슈도코드s 돌려서 -> left, right -> isValid false면 패스 -> toLowerCase 쳐서-> 다른 게 나오면 false, 다 통과하면 true4. 구현코드const isAlpha = (c: string) => c >= 'a' && c c >= '0' &..
https://school.programmers.co.kr/learn/courses/30/lessons/765021. 문제분석[]{}() 1~1000개 문자열 s -> 조건을 충족하는 왼쪽 시프트 가능개수 리턴 (최대 s.length - 1)2. 풀어보기[](){} length=6 -> 0 [](){} o, 1 ](){}[ x, 2 (){}[] o, 3 ){}[]( x, 4 {}[]() o, 5 }[](){ x -> 3개3. 슈도코드stack[] 선언, s를 받아서 -> [({가 나오면 푸시 -> ])}가 나오면 팝 후 정합성 체크 -> 다 통과시 성공 -> 이걸 length 만큼 반복 -> 최대 1000*1000 O(N^2)4. 구현코드type Opening = '[' | '(' | '{';const ..
https://leetcode.com/problems/merge-two-sorted-lists/description/1. 문제분석0~50개 LinkedList의 head{val,next}인 list1, list2 -> 비-내림차순(≈오름차순) -> 하나의 정렬된 리스트로 병합하고, 새로운 head 리턴2. 풀어보기list1[1,2,4], list2[1,3,4] -> [1,1,2,3,4,4]list1[], list2[] -> []list1[], list2[0] -> [0]3. 슈도코드list1,list2 -> 빼서 head에 넣고 -> 뺀거.next,나머지 -> 빼서 head.next에 넣고 -> 둘 다 null이 아닐 동안 반복하고-> 끝나고 남은 한 쪽을 next에 연결 해줌 (null이면 null) ..
https://leetcode.com/problems/reverse-linked-list/description/1. 문제분석0~5000개 LinkedList의 head{val,next} -> 방향을 뒤집어서 리턴2. 풀어보기head = [1,2,3,4,5] -> [5,4,3,2,1]3. 슈도코드끝까지 들어가서 되돌아 나오면서 -> next를 prev 값으로 변경해줌4. 구현코드class ListNode { val: number = 0; next: ListNode | null = null;}const reverseList = (head: ListNode | null): ListNode | null => { if (!head || !head.next) { return head; } return..
https://leetcode.com/problems/valid-parentheses/description/1. 문제분석(){}[] 1~1만 글자 s -> 괄호가 올바른 순서로 닫히는 지 확인2. 풀어보기() -> true()[]{} -> true(] -> false3. 슈도코드s를 돌려서 스택에 넣고 -> 닫히는 괄호가 나오면 팝 -> 대응되면 패스, 안 되면 false -> 다 통과시 true4. 구현코드type Closing = ']' | ')' | '}';const OPENING_BY_CLOSING: Record = { ']': '[', ')': '(', '}': '{',};const isClosing = (c: string): c is Closing => c in OPENING_BY_CLO..
