본문 바로가기

반응형

개발/Algorithm

(98)
[리트코드] Top K Frequent Elements(python) 리트코드, Top K Frequent Elements_K개의 자주 나온 원소들 TL;DR 딕셔너리(dictionary)를 활용하여 문제를 해결할 수 있는지 `collections.Counter`를 활용할 수 있는지 문제 분석 1. 정수 배열 nums와 정수 k가 주어질 때, 상위 k개의 가장 자주 등장한 원소를 반환하라. 2. 반환되는 정답은 어떤 순서로 정렬되어도 상관없다. - 1 : 해결해야 하는 문제에 대해서 설명해야 한다. - 2 : 자주 등장한 k개의 숫자들을 별도의 정렬 없이 그냥 반환하면 된다. 만약 이 부분에 다른 조건이 명시된다면 해당 조건을 반영하여 답을 반환해야 한다. 입출력 형태 - 주어진 숫자 배열은 3개의 1, 2개의 2, 1개의 3으로 이루어져 있다. - k가 2로 주어졌으므로..
[리트코드] Longest Substring Without Repeating Characters(python) 리트코드, Longest Substring Without Repeating Characters_중복 문자가 없는 가장 긴 서브 문자열 TL;DR 딕셔너리(dictionary) 두 개의 포인터(투 포인터, two pointer)를 활용한 슬라이딩 윈도우(sliding window)를 구현할 수 있는지 문제 분석 1. 주어진 문자열 s에 대해, 중복 문자가 없는 가장 긴 서브 문자열의 길이를 찾아라. - 해결해야 하는 문제 조건에 대해서 말하고 있다. - 여기서 주의해야할 점은 서브 문자열이라는 것이다. 이 부분에 대해서는 입출력 형태에서 확인하도록 하겠다. 입출력 형태 - 가장 먼저 생각할 수 있는 방법은 `collections.Counter` 또는 `set`으로 변환하여 중복을 제거하는 방법이다. 단, ..
[프로그래머스] 숫자의 표현(python) 프로그래머스, 숫자의 표현 TL;DR 투 포인터(two pointer)를 활용하여 문제를 해결할 수 있는지 문제 분석 1. 자연수 n을 연속한 자연수로 표현하는 방법이 여러 개가 존재한다. 2. 자연수 n이 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return 하는 함수를 완성하라. 3. n n: break return answer - 이전에 리트코드에서 푼 투 포인터 문제들은 양 끝단, 즉, 배열의 시작과 끝을 left와 right라는 변수를 할당하고 푸는 문제들이었다. - 이번 문제도 마찬가지로 투 포인터라고 분류 할 수 있기 때문에 두 개의 시작과 끝을 나타내는 변수인 left와 right를 사용하려고 하였다. - 하지만, 그럴 경우 시간 초과로 인해 문제를 해결할 수가 없다. 불필..
[리트코드] Jewels and Stones(python) 리트코드, Jewels and Stones_보석과 돌 TL;DR 해시(해시 테이블/맵, 딕셔너리)을 사용하여 주어진 문제를 풀 수 있는지 문제 분석 1. jewels : 각 글자는 보석에 해당하는 돌을 나타낸다. 2. stones : 각 글자는 내가 보유하고 있는 돌을 나타낸다. 3. 내가 갖고 있는 돌 중 보석이 몇 개나 있는지를 반환하라. 4. 'a'와 'A'는 서로 다른 종류의 돌로 간주한다. - 내가 보유하고 있는 돌인 stones에서 jewels에 있는, 보석인 돌을 얼마나 갖고 있는지를 파악하는 문제이다. - 내가 보유한 돌의 종류를 key로, 돌의 개수를 value로 하는 딕셔너리(dictionary)로 생각하면 문제를 해결할 수 있다. 입출력 형태 - 예시 1 - 내가 보유한 돌은 a 1개..
[리트코드] Design Circular Queue(python) 리트코드, Design Circular Queue_원형 큐 구현하기 TL;DR 원형 큐(Circular Queue)에 대해서 이해하고 있는지 문제 분석 1. First In, First Out(FIFO) 특징을 갖고 있는, 큐의 마지막이 큐의 처음과 연결되어 있는 '링 버퍼' 구조를 갖고 있는 원형 큐를 구현하여라. 2. MyCircularQueue(k) : 큐의 길이가 k인 원형 큐를 생성한다. 3. Front() : 큐의 가장 앞에 있는 원소를 가져온다. 만약 큐가 비어있다면 -1을 반환한다. 4. Rear() : 큐의 가장 뒤에 있는 원소를 가져온다. 만약 큐가 비어있다면 -1을 반환한다. 5. enQueue(value) : value를 큐에 삽입한다. 성공적으로 실행되었을 경우 True를 반환한다..
[리트코드] Implement Queue using Stacks(python) 리트코드, Implment Queue using Stakcs_스택을 활용하여 큐 구현하기 TL;DR 큐(Queue)에 대해 이해하고 있는지 문제 분석 1. 두 개의 스택을 활용하여 큐를 구현하라. 2. 구현된 큐는 기본적인 큐의 기능인 push, peek, pop, empty를 지원해야 한다. 3. 큐를 구현할 때는 stack의 기본 기능인 push to top, peek/pop from pop, size, is emtpy만 활용해야 한다. - stack의 기본 기능만 사용하여 큐를 구현해야 한다. - 큐는 First In, First Out(FIFO)의 자료구조이다. - push : 큐에 자료형을 집어넣는다. - peek : 큐의 가장 먼저 들어간 원소를 반환한다. - pop : 큐의 가장 먼저 들어..
[리트코드] Implement Stack using Queues(python) 리트코드, Implement Stack using Queues_큐로 스택 구현하기 TL;DR 스택(Stack)의 개념을 이해하고 있는지 문제 분석 1. 두 개의 큐를 사용하여 스택을 구현하여라. 2. 구현된 스택은 push, top, pop, empty 함수를 지원해야 한다. 3. 큐를 사용할 때 push to back, peek/pop from front, size, is empty와 같은 함수만 사용 가능하다. - 큐를 활용하여 스택의 기능인 push, pop, top, empty를 구현하는 문제이다. - 스택은 Last In, First Out(LIFO) 구조를 갖는 자료구조 형이다. - push는 스택의 새로운 원소를 추가하는 동작을 수행한다. - top은 가장 마지막에 추가된 스택의 원소를 반환..
[리트코드] Valid Parentheses(python) 리트코드, Valid Parentheses_유효한 괄호 TL;DR 스택(stack) 문제 분석 1. 주어진 괄호 문자('(', ')', '{', '}', '[', ']')를 포함하고 있는 문자열 s가 유효한지를 판별해야 한다. 2. 열린 괄호는 같은 종류의 닫힌 괄호와 붙어있어야 한다. 3. 열린 괄호와 같은 종류의 닫힌 괄호는 정확한 순서로 되어 있어야 한다. - 1 : 해결해야 하는 문제에 대해서 설명하고 있다. - 2 ~ 3 : 같은 종류의 열린 괄호와 닫힌 괄호로만 이루어져있는 문자열이 올바른 괄호 문자라는 것을 설명하고 있다. 입출력 형태 - 입출력 예시를 통해 문제에서 말하는 유효한 괄호문자의 조건을 확인할 수 있다. - 예시 1과 예시 2는 서로 같은 종류의 괄호들이 올바르게 잘 배치되어 있..