본문 바로가기

분류 전체보기147

Interval, Scheduling 문제 (LeetCode 435) 문제 설명 Interval을 Scheduling 하는 문제는 코딩 문제의 대표적인 유형 중 하나이다. 예를 들어, 시계열을 기준으로 시작 시간과 종료 시간이 주어진 여러개의 수업이 있을 때, 이를 최대한 많이 수강할 수 있는 수업들을 Scheduling 하는 것이다. 이 문제는 Sorting과 Greedy Algorithm 개념을 활용해 풀 수 있다. 먼저 Scheduling 문제는 Greedy Algorithm을 적용할 수 있다. 이를 적용하기 위해서는 2가지를 고려해야 하는데, 첫번째는 각 Interval이 Sorting 되어야 한다는 것이다. 그리고 Interval의 종료 시간을 기준으로 Sorting 되어야 한다. 문제 예시 4개 수업의 시작 시간 및 종료 시간이 다음과 같이 주어졌을 때, 겹치지.. 2023. 7. 28.
LeetCode 62. Unique Path Level은 Medium으로 책정되었지만 좀 더 쉬운 난이도의 문제이다. 데이터 구조 Queue를 사용하고 Dynamic Programming 개념을 차용하면 풀 수 있다. class Solution { public: int uniquePaths(int m, int n) { int arr[100][100] = { 0 }; int AlreadyQueue[100][100] = { 0 }; queue grid; pair SearchGrid; grid.push(make_pair(0, 0)); arr[0][0] = 1; while (!grid.empty()) { SearchGrid = grid.front(); grid.pop(); // Go Down if (SearchGrid.first < (m - 1)){ ar.. 2023. 7. 27.
Fibonacci(피보나치), Tribonacci 문제 풀이 DP, Recursion, Bottom Up Tribonacci 수열 피보나치 수열이란, 특정 항이 앞의 두 항의 합과 같은 수열을 의미한다. 첫번째와 두번째 항의 값은 0, 1로 고정된다. 피보나치 수열의 n 번째 값이 무엇인지 계산하는 것이 코딩 기본 문제에 종종 등장한다. Tribonacci 수열은, 피보나치 수열에서 1개의 항을 더 추가하는 것이다. 즉, 특정 항의 값이 앞의 세개 항의 합과 같은 수열이다. 이때 첫번째, 두번째, 세번째 항의 값은 각각 0, 1, 1로 고정된다. 예를 들어, Tribonacci의 4번째 항은 0 + 1 + 1 = 2이다. 5번째 항은 1 + 1 + 2 = 4가 되는 것이다. Tribonacci 수열의 n번째 값을 계산하는 문제도 종종 코딩 문제로 나온다. 문제 풀이 방식은 피보나치와 다를게 없다. 연습해보고.. 2023. 7. 27.
Monotonic Stack, 단조 스택이란? Monotonic Stack (단조 스택) Monotonic Stack은 원소가 Increasing / Decreasing으로 정렬되어 있는 배열을 의미한다. Monotonic Stack 그 자체로 유용함은 없지만, 정렬되어 있지 않은 배열을 Monotonic Stack으로 만드는 과정 혹은 Monotonic Stack에 새로운 원소가 입력되었을 때, 정렬하는 과정에서 발생하는 정보들이 유용하다. 이를 사용해 풀 수 있는 문제들이 있는데, 대표적인 문제는 Find Next Greatest Number 이다. Brute Force로도 풀 수 있지만 Time Complexity : O(n^2)이므로 입력 배열의 원소 개수가 많을 수록 불리하다. 이때 Monotonic Stack을 만드는 과정에서의 정보를 이.. 2023. 7. 24.
LeetCode 1768 Merge String Alternately 간단한 아이디어로 풀 수 있는 쉬운 문제이다. String Class 메서드 사용에 익숙해야 한다. 훨씬 간단하게도 짤수 있는데! class Solution { public: string mergeAlternately(string word1, string word2) { unsigned int minLength = 0; unsigned int Lengthword1 = word1.length(); unsigned int Lengthword2 = word2.length(); string MergedString; string SortedMergedString; if (Lengthword1 > Lengthword2) { for (unsigned int i = 0; i < (Lengthword1 - Lengthw.. 2023. 7. 17.
[C언어] 변수의 유효 범위 (variable scope) 아래는 문제가 있는 코드로 정적검증을 돌려보면 높은 위험성의 코드로 분류될 수 있다. 무엇이 문제인지 모르겠다면 변수의 유효 범위에 대한 공부가 필요하다. 변수의 유효 범위란 OS가 변수의 메모리를 할당 및 유지해주는 영역, 범위를 말한다. 유효 범위를 벗어나면 OS에서는 변수의 메모리를 해제한다. 지역 변수의 유효 범위 지역 변수는 선언된 블록 내에서만 유효하다(메모리가 할당된 채 유지된다). 블록은 중괄호 {} 내 영역이다. 함수도 하나의 블록이다. 위 그림에서 pVar1 포인터 변수는 main {} 블럭과 if {} 블럭에서 모두 유효하다. 이는 메모리가 할당되어 있는 것이고, 조사식을 통해 변수의 값을 확인할 수 있다. 하지만 Var2 변수는 if{} 블럭에서만 유효하고 main {} 블럭에서는 .. 2023. 7. 3.