1504. Count Submatrices With All Ones (JAVA)
·
알고리즘/LeetCode
https://leetcode.com/problems/count-submatrices-with-all-ones/description/?envType=daily-question&envId=2025-08-21 0과 1로 이루어진 행렬이 있을 때, 원소가 모두 1인 부분행렬(연속한 직사각형)의 총 개수를 구하는 문제입니다. 아래 이미지같은 행렬이 있고 각 칸에 1, 2, 3 … 번호를 붙여 생각해보겠습니다. 예를 들어 3×4 격자에서 8번 칸의 값이 1로 바뀌었다고 가정합니다. 이때 추가되는 부분행렬은 모두 ‘8’을 우하단(가장 오른쪽·아래) 꼭짓점으로 가지는 직사각형입니다. 즉, 현재 행에서 j칸을 기준으로 왼쪽으로 폭을 1, 2, 3…칸씩 넓혀 갈 때마다, 그 폭에서 올라갈 수 있는 최대 높이(=그 폭의 ..
3479. Fruits Into Baskets III [JAVA]
·
알고리즘/LeetCode
https://leetcode.com/problems/fruits-into-baskets-iii/description/?envType=daily-question&envId=2025-08-06 LeetCode의 3477.Fruits Into Baskets II 문제와 거의 동일한 문제입니다. 다만 다른점은 input size가 최대 1000 에서 1000000000으로 늘어났다는 점입니다. 때문에, O(n^2) 방식으로도 풀 수 있었던 3477.Fruits Into Baskets II문제와 동일한 솔루션을 제출 할 경우 시간초과가 발생하게 됩니다. 문제에선 과일의 수량보다 더 큰 용량을 가진 **가장 왼쪽**의 바구니에 과일을 담아야하기때문에 과일과 바구니배열을 정렬 항 이후에 문제를 풀게된다면 오답이 발..
[LeetCode] Find All K-Distant Indices in an Array (JAVA)
·
알고리즘/LeetCode
https://leetcode.com/problems/find-all-k-distant-indices-in-an-array/?envType=daily-question&envId=2025-06-24 해당 문제는 단순히 이중for문을 통해서 각 배열의 요소가 k거리이내에 key값이 존재하는지 검사하는 방식만으로도 충분히 해결이 가능한 문제입니다. 하지만 위 방식으로는 다소 비효율적인 부분이 발생하게 됩니다.위와 같은 경우에 주어진 범위내에 key값이 존재하는지 검사하면서 아래와 같이 동일한 구간을 중복으로 검사하게되는 상황이 발생하게됩니다. 또한 key값을 기준으로 k범위 내의 자리를 추가하는 방식또한 아래와 같은 중복이 발생하게됩니다. 때문에 위와같은 중복현상을 해결하기위해서 Two Pointer 개념..
[프로그래머스] 완전범죄 (JAVA)
·
알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/389480 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제를 처음 접했을때는 완전탐색을 통한 A도둑과 B도둑의 흔적의 개수를 계산 하는 방식이였습니다. 당연하게도 주어진 제한조건 1 ≤ info의 길이 ≤ 40으로 인해 경우의 수는 최대 2^40으로 시간초과가 발생하게 됩니다. 결국 이 문제를 해결하기위해서는 최적화를 진행해야합니다. 최적화의 방식으로는 Greedy, DP 2가지 방식을 떠올릴수 있었습니다. 문제의 제한사항 info[i] = [A에 대한 흔적의 갯수, B에 대한 흔적의 갯수]로 인해서..
[프로그래머스] 거리두기 확인하기 (JAVA)
·
알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/81302 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 이 문제를 접했을때 bfs 또는 dfs탐색을 수행하면서 주어진 조건을 체크하는 방식으로 풀어나가야된다고 생각했습니다. 하지만 이 문제는 bfs 또는 dfs탐색을 수행하지않고 단순탐색만으로도 충분히 해결 가능합니다. 거리두기를 위하여 응시자들 끼리는 맨해튼 거리1가 2 이하로 앉지 말아 주세요.단 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다.위 두가지 조건으로 알 수 있는 거리두기의 규칙은 아래와 같습니다. 1. 2명 이상의 참..
[프로그래머스] 야근지수 (JAVA)
·
알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12927 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr이 문제는 작업량을 우선순위에 따라 줄여야 하므로, 전형적인 최대 힙(Max Heap) 문제로 볼 수 있습니다. . works = [a, b] 이고 a 작업 피로도 감소량은 아래와 같습니다.1. a 작업 피로도 감소량 : a^2 - (a - 1)^2 = 2a - 1 2. b 작업 피로도 감소량 : b^2 - (b - 1)^2 = 2b - 1b > a일 경우 b 작업을 먼저 줄이는 것이 전체 피로도를 더 효과적으로 줄입니다. 즉, 작업량이 클수록 1을 줄였..
[프로그래머스] 아이템줍기 (JAVA)
·
알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 이 문제는 일견 BFS와 그리드를 이용한 전형적인 최단 거리 탐색 문제처럼 보입니다.하지만 진짜 핵심은 BFS 자체가 아니라, 캐릭터가 사각형 도형의 테두리만을 따라 이동한다는 제약 조건을 어떻게 정확히 구현할 것인가에 있습니다.캐릭터는 위 그림처럼 색칠된 부분(초록색, 붉은색), 즉 사각형의 테두리만을 따라 이동해야 합니다.하지만 우리가 구현하는 그리드는 시각적인 ‘변’이 아니라 격자상의 ‘점’ 단위로 구성됩니다.겉으로 보기엔 선을 따라 이동하는 것처..
[Ticketable] 대기열 구현하기(Redis)
·
TIL
이번 글에서는 최종프로젝트[Ticketable] 에서 대기열 기능의 설계와 구현내용을 담았습니다.대기열의 필요성Ticketable 프로젝트는 야구 경기를 대상으로 한 티켓 예매 및 경매 시스템입니다.이 중에서도 티켓팅 기능은 특정 시간에 트래픽이 폭발적으로 몰릴 가능성이 높으며,서버 과부하로 인해 예매 실패 또는 서비스 장애가 발생할 수 있는 구조였습니다.이러한 문제를 해결하기 위해 트래픽 제어 방식으로는 다음과 같은 방법들을 고려할 수 있었습니다.Scale-Up: 서버 자체의 스펙(CPU, 메모리 등)을 높여 처리 성능을 향상시키는 방법Scale-Out: 여러 서버에 트래픽을 분산시키는 방법 (예: 로드 밸런서 + 복수 서버 구성)대기열(Queue): 서버가 감당할 수 있는 요청만 처리하고, 나머지는 ..