목록Coding (52)
이우의 개발일지
RAII (Resource Acquisition Is Initialization)이란? 자원의 안전한 사용을 위해 객체가 쓰이는 스코프를 벗어나면 자원을 자동으로 해제해주는 기법입니다. 즉, 변수가 선언되거나 파일을 열 때 자원이 할당 되고 해당 스코프에서 벗어나면 자동으로 해제되는 기법입니다. 보통 자원 획득이 필요한 경우, 자원 획득을 담당하는 클래스를 만들어 그 클래스의 생성자에서만 자원 획득을 하는 것입니다. (프로그램을 개발하다보면 동적 메모리 할당, 파일 열기, 락 등 자원 획득을 많이 하는데, 이러한 자원 획득을 담당하는 클래스를 만들어 그 클래스의 생성자에서만 자원 획득을 하는 것입니다.)RAII의 핵심 원리생성과 동시에 리소스 획득: 객체가 생성될 때 필요한 리소스를 획득하고, 생성자..
소프티어 징검다리 문제 입력예제1 5 3 2 1 4 5 출력예제1 3 징검다리 풀이 이 문제는 최장 증가 부분 수열 알고리즘을 이용해서 풀이를 하는 문제이다. 최장 증가 부분 수열 알고리즘(LIS)이란? 원소가 n개인 배열의 일부 원소를 골라내서 만든 부분 수열 중, 각 원소가 이전 원소보다 크다는 조건을 만족하고, 그 길이가 최대인 부분 수열을 최장 증가 부분 수열이라고 합니다. LIS 알고리즘에는 DP 알고리즘을 사용하는 것이 유리하다. 아래 방식처럼 전체의 값을 1로 정의하고 만약 원래 값보다 체크하는 값이 크다면 max를 써서, 값을 새로 넣어주는 식으로 정의할 수 있다. for (int k=0; k 처음에는 이 문제를 재귀함수를 써서 사용을 했는데, 시간 복잡도가 O(2^n)이 나와서 시간초..
코드트리 Carry 피하기 문제 https://www.codetree.ai/problems/escaping-carry/description n개의 숫자가 주어지고, 그 숫자를 적절하게 골라 더했을 때 carry가 전혀 발생하지 않는 최대로 고를 수 있는 숫자의 수를 계산하는 프로그램을 작성해보세요.여기서 carry란, 수와 수를 더했을 때, 10의 자리를 넘기는 것을 말합니다. 예를 들어 3과 6을 더하면 9가 되고 자리수가 넘어가지않아 carry가 발생하지 않지만, 5와 7은 더하면 12가 되므로 carry가 발생합니다. 또, 81과 72를 더하면 일의 자리를 더할때는 carry가 발생하지 않더라도 십의 자리를 더할 때는 carry가 발생하게 되므로 불가능한 조합입니다. 즉, 각 자리수를 모두 각각 더..