https://leetcode.com/problems/maximum-number-of-achievable-transfer-requests/
Maximum Number of Achievable Transfer Requests - LeetCode
Can you solve this real interview question? Maximum Number of Achievable Transfer Requests - We have n buildings numbered from 0 to n - 1. Each building has a number of employees. It's transfer season, and some employees want to change the building they re
leetcode.com
요즘 리트코드 데일리문제를 계속 풀고 있다. 이유는 단순하게 문제의 질이 좋다.
내가 생각하기에 좋은 문제는 문제 해석이 복잡한 것보다는 핵심 개념이 들어가며 이를 활용할 수 있는 문제이다.
핵심
이 문제는 Hard난이도지만, 그렇게 어려운 문제는 아니라고 생각한다. 아이디어는 한 사람씩 이동하면서 그때 빌딩의 사람수가
초기의 수와 같은지 비교하면 된다.
정답 코드
class Solution {
private int result = 0;
private int[] building;
public int maximumRequests(int n, int[][] requests) {
building = new int[n];
backTracking(requests, 0, n, 0);
return result;
}
private void backTracking(int[][] requests, int index, int n, int count) {
if (index == requests.length) {
for (int i = 0; i < n; i++) {
if (building[i] != 0) {
return;
}
}
result = Math.max(result, count);
return;
}
building[requests[index][0]]--;
building[requests[index][1]]++;
backTracking(requests, index + 1, n, count + 1);
building[requests[index][0]]++;
building[requests[index][1]]--;
backTracking(requests, index + 1, n, count);
}
}
해설
일반적인 백트래킹 문제이다. 중요한 점은 각각의 조건을 시행하거나, 안 하거나를 반복하며 전체를 탐색한다.
시행할 경우 count를 1 올린다. 모든 조건을 탐색했다면 배열의 카운트가 전부 0 인지 확인한다.
전부 0일 경우 초기의 값과 동일하다는 의미이기 때문이다.
배운 점
일반적인 백트래킹문제라 그리 어렵지는 않았다.
초반에 영어로 되어있기에 문제해석이 어려웠지만 해석을 하니 쉽게 풀 수 있었다.
하지만 매우 중요한 개념을 담고 있는 문제라고 생각한다.
아마 앞으로도 당분간 리트코드 문제를 풀 생각이다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[LeetCode] 2024 - Maximize the Confusion of an Exam(java) (0) | 2023.07.07 |
---|---|
[LeetCode] 209 - Minimum Size Subarray Sum(java) (0) | 2023.07.06 |
[LeetCode] 864 - Shortest Path to Get All Keys(java) (0) | 2023.07.01 |
[프로그래머스] 경주로 건설(java) (2) | 2023.05.21 |
[프로그래머스] 수식 최대화(java) (0) | 2023.05.15 |