| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- SWEA
- 자바스크립트
- Daum
- Python
- 파이썬
- Backjoon
- 스택
- 삼성
- sort
- DP
- 완전탐색
- SW역량테스트
- 코딩테스트
- Blind
- SSAFY
- boj
- 알고리즘
- 그래프
- 싸피
- algorithm
- 코테
- 자료구조
- BFS
- 힙큐
- 다이나믹프로그래밍
- 카카오
- 프로그래머스
- javascript
- 백준
- DFS
- Today
- Total
목록Algorithm Problem (238)
맞왜틀
https://leetcode.com/problems/valid-anagram/description/1. 문제의 본질 파악아나그램(Anagram)은 단어의 알파벳 순서를 바꿔서 다른 단어를 만드는 것입니다. 즉, "순서는 상관없이 구성하는 각 알파벳의 종류와 개수가 완전히 동일한가?"를 묻는 문제입니다.두 문자열을 정렬해서 비교하는 방법[O(N log N)]도 있지만, 해시맵(Hash Map)을 활용하면 단 한 번의 카운팅[O(N)]으로 훨씬 빠르게 해결할 수 있습니다.2. 놓치기 쉬운 엣지 케이스: 얼리 리턴 (Early Return)문자열을 비교하기 전 가장 먼저 확인해야 할 것은 길이입니다.두 문자열 s와 t의 길이가 다르다면 알파벳 개수를 셀 필요도 없이 절대로 아나그램이 될 수 없습니다. 코드 ..
https://leetcode.com/problems/two-sum/1. 직관적인 출발: 브루트 포스 (Brute Force)가장 먼저 떠올릴 수 있는 가장 직관적인 접근법입니다. 배열 내의 모든 가능한 두 수의 조합을 이중 루프(for문)로 전부 확인하며 합이 target이 되는지 검사합니다.시간 복잡도: $O(N^2)$ (구체적으로는 $\frac{N(N-1)}{2}$번 연산)특징: 누구나 쉽게 구현할 수 있고 문제 이해의 출발점이 되지만, 배열의 크기가 크면 시간 초과가 발생할 위험이 있습니다./** * @param {number[]} nums * @param {number} target * @return {number[]} */var twoSum = function (nums, target) { ..
리트코드 문제: Top K Frequent Elements이 문제는 배열에서 자주 등장하는 k개의 요소를 찾는 문제입니다. 예를 들어, 배열 [1,1,1,2,2,3]과 k = 2가 주어진다면, 가장 빈번하게 등장한 숫자는 1과 2이므로 [1, 2]가 답이 됩니다.문제 분석이 문제는 배열의 각 요소가 몇 번 등장하는지를 계산하고, 그중에서 자주 등장한 k개의 요소를 추출하는 문제입니다.풀이 접근빈도 계산먼저 배열에서 각 숫자가 몇 번 등장했는지를 파악해야 합니다. 이를 위해 **해시맵(Map)**을 사용해 각 숫자의 빈도를 기록할 수 있습니다.빈도별 정렬각 숫자의 등장 횟수를 기준으로 배열을 정렬한 후, 그중에서 가장 빈번하게 등장한 k개의 요소를 추출하면 됩니다.코드 설명var topKFrequent =..
리트코드 문제: Longest Substring Without Repeating Characters이 문제는 주어진 문자열에서 중복된 문자가 없는 가장 긴 부분 문자열을 찾는 문제입니다. 예를 들어, 문자열 "abcabcbb"가 주어졌다면 "abc"가 가장 긴 부분 문자열로, 답은 3입니다.문제 분석주어진 문자열에서 중복되지 않은 문자가 포함된 가장 긴 부분 문자열을 찾는 것이 목표입니다. 즉, 중복 문자가 나타나면 이전에 찾았던 부분 문자열을 중단하고, 중복이 없도록 시작 위치를 다시 조정해야 합니다.풀이 접근이 문제는 슬라이딩 윈도우와 같은 방식으로 해결할 수 있습니다. 슬라이딩 윈도우는 문자열에서 특정 범위를 탐색하면서 중복된 문자를 만나면 그 범위를 조정하는 방식입니다.문자열을 탐색하면서 중복 체..
🤔문제 해결 쉬운 그리디 문제 이중 포문을 활용해서 격자의 타일을 하나씩 선택 깨진 타일을 만났을 때 오른쪽, 아래, 오른쪽아래대각선이 깨져있는지 확인 깨져있지 않다면 NO 또는 인덱스 에러가 발생하면 NO 깔끔하게 마무리 된다면 YES 💻소스 코드 T = int(input()) def is_right(grid): for i in range(N): for j in range(M): if grid[i][j] == '#': try: if grid[i + 1][j] == grid[i][j + 1] == grid[i + 1][j + 1] == '#': grid[i][j] = grid[i + 1][j] = grid[i][j + 1] = grid[i + 1][j + 1] = '.' else: return 'NO' ..
🤔문제 해결 O O X X O O O O X X O O X X O O X X X X O O X X O O X X O O O O X X O O O O X X O O O X X O X X O O X 위에서부터 아래로 한줄씩 내려가면서 규칙을 찾아보면위의 그림처럼 심는게 가장 경우의 수가 많게 심을 수 있다. 첫줄에서 오른쪽으로 4칸마다 2개씩 심을 수 있다 그리고 나머지칸이 3칸 - 2개 2칸 - 2개 1칸 - 1개 0칸 - 0개 두번째 줄도 위와 같다 세번째 줄은 앞의 두칸을 빼고 시작하여 위의 규칙을 적용 네번째도 세번째와 같다 다섯번째는 다시 첫번째처럼 결론은 1,2 | 3,4 | 5,6 | 7,8 | ... 짝지어서 하면된다. 💻소스 코드 def get_axis_per_count(num): count..