반응형

알고리즘 문제/LeetCode 4

LeetCode - Remove Duplicates from Sorted Array II (C#)

정렬된 배열을 입력 받을 때, 중복 개수가 최대 2가 되도록 중복 요소들을 제거해주세요. 📗 풀이 방법// 숫자, 중복 개수Dictionary dic = new Dictionary();중복 개수를 빠르게 파악하기 위해 Dicrionary를 사용합니다  for (int i = 0; i nums 배열을 순회하며 Dictionary에 넣어주고 개수를 + 1 해줍니다.📜 목표우리가 구해야 하는 목표는 최대 중복 개수가 2가 되도록 만든 후의 nums 배열과 nums배열의 길이입니다.중복 개수가 2이하인 것들만 nums 배열에 남을 수 있으니 가상의 index를 만들어서 관리해줍니다. int ret = 0;int idx = 0;for (int i = 0; i 중복 개수가 2 이하인 경우 재배치를 해주며 해결합..

Longest Increasing Subsequence (C#)

풀이 방법int n = nums.Length;int[] dp = new int[n];Array.Fill(dp, 1); // 최소 길이는 1 (각 원소 자체만 고려)nums 배열 크기랑 같은 크기로 배열을 만들어주고 1로 채워줍니다.  이후 2중 for문을 통해 계산을 합니다.우선 1번을 기준으로 2~6번 Index까지 체크를 합니다 만약 2~6번의 수가 1번 보다 크다면 증가하는 수가 되기 때문에 DP 배열에 +1을 해줍니다.  이후 2번 Index를 기준으로 3 ~ 6번까지 계산을 해줍니다. Index 2번 보다 큰 수들은 DP[2] + 1로 DP 값을 업데이트 해줍니다.이때,  DP[2]+1 보다 큰 수가 이미 저장되어 있다면 건너뜁니다. 코드로 표현하면 아래와 같습니다.for (int i = 0; ..

Flood Fill (C#)

이중 배열, 시작 위치, 변경한 색상 값을 입력받습니다.시작 필셀부터 시작해서 인접해 있는 픽셀의 색상값을 변경할 때, 최종적인 이미지의 모습을 반환해주세요(시작 위치의 색상과 같은 색상만 변경할 수있습니다.) 풀이 방법BFS(넓이 우선 탐색)을 이용하여 풀이합니다. Queue q = new Queue();q.Enqueue((sr, sc));Queue에 위치 값을 넣고 인접한 픽셀의 위치값으로 이동하는 방식으로 진행합니다(int, int)는 Tuple입니다. int myColor = image[sr][sc];image[sr][sc] = color;색상을 채울 기존의 컬러를 저장하고, 다음 컬러를 시작 위치에 넣습니다. int[] dy = new int[4]{1, -1, 0, 0};int[] dx = ne..

Largest Rectangle in Histogram (C#)

너비가 1인 막대의 높이를 배열로 입력 받을 때, 가장 큰 사각형의 넓이를 구하는 문제입니다.  풀이 방법특정 범위에서 크기가 가장 작은 막대를 찾은 후, (해당 범위의 길이 * 막대의 높이)가 우리가 구해야할 크기입니다.이것을 모든 범위에서 해주면 되는데, 그렇게 되면 시간 초과가 발생하는 문제가 생깁니다. 이 문제를 해결하기 위해 Stack을 이용해줍니다.가장 작은 수가 stack의 맨 위에 오도록 설계 해준 후, 탐색중인 범위의 넓이를 구해준다면 O(N)의 속도로 해결이 가능합니다.  Stack 풀이 전략1. 반복문을 통해 0 ~ heights.Length-1 까지 Stack에 넣어줍니다. (Stack에는 범위 계산을 위해 Index를 넣어줍니다) 2. 이 때, 현재 Stack의 가장 위에 있는 수..

반응형