본문 바로가기

Algorithm

(68)
구현 알고리즘 테스트에서 구현 문제란 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제 즉, 프로그래밍 언어/문법/라이브러리에 대한 이해도가 높아야 함 * Java로 알고리즘을 공부하고 있다면 이 사이트를 추천한다. https://codingbat.com/java CodingBat Java Welcome to Codingbat. See help for the latest. codingbat.com 예) 알고리즘은 간단한데 코드가 지나치게 긴 문제 특정 소수점 자리까지 출력해야하는 문제 문자열이 입력으로 주어졌을 때 한문자 단위로 끊기(Parsing) 분류 완전 탐색 : 모든 경우의 수를 전부 다 계산해야하는 방법 시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례로 직접 수행해야하는 문제 제약사..
[c++] string내 substring 있는지 찾아내기 (find) 문자열 내 특정 문자열이 존재하는지 찾기 #include string text = "1234"; string sub = "1"; if (text.find(sub) != string::npos) // sub가 존재한다 if (text.find(sub) == string::npos) // sub가 존재하지 않는다 find 는 O(N)의 시간 복잡도를 가지기 때문에 어떤 상황에서는 for문으로 직접 구현하는게 좋을 수도 있다
형변환 String string to int / double / long / float #include #include string int_v = "1234"; string double_v = "12.34"; int i = stoi(int_v); double d = stod(double_v); Int int to string #inlcude string a = to_string(40); Char 특별한 형변환 char를 의미를 가진 int로 변경하고 싶은 경우 char c1 = 'a'; char c2 = '1'; int i1 = c1 - 'a'; // i1 = 0 int i2 = c2 - '1'; // i2 = 0; char c3 = 'b'; int i3 = c3 - 'a'; // i3 = 1
그리디 알고리즘 그리디 알고리즘 현재상황에서 가장 좋아보이는 것만 선택하는 알고리즘 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다 사용하는 경우 사전에 외우고 있지 않아도 풀 수 있을 가능성이 높은 문제 시간 복잡도 O(N)이므로, 입력 범위가 크다 (1,000,000 < N) 어떤 기준에 따라 좋은 것을 선택하기 때문에 숨겨진 기준이 존재한다 → 정렬과 함께 사용될 가능성이 높음 특징 사전에 외우고 있지 않아도 풀 수 있을 가능성이 높은 문제 창의력, 문제를 풀기 위한 아이디어를 떠올 릴 수 있어야 함 현재의 최적의 선택해 == 전체 문제의 최적의 선택해 가 되어야 함 모든 문제에서 정당한 해법이 아닐 수 있음 ( 현재 최적의 선택해 != 전체 문제의 최적해) 수학적 증명이 많이 필요함 (판단이 어려움) ..
[SQL] WITH(RECURSIVE) 가상의 테이블 WITH 메모리상에 가상의 테이블을 저장할 때 사용된다 (1회만사용가능) WITH TMP AS ( SELECT A,B,C FROM T WHERE... ) SELECT ... FROM TMP #여기서 사용가능 WHERE ... WITH RECURSVIE recursive 말 그대로, 자기 자신의 값을 참조하여 값을 가지는 테이블이다 WITH RECURSIVE TMP AS( SELECT 0 AS NUM # 초기값 0 UNION ALL SELECT NUM+1 FROM TMP # 초기값 0을 이용하여 테이블 생성 WEHRE NUM < 10 # 반복 정도 ) RECURSIVE 사용시에는 UNION ALL이 필수적이며, WHERE를 이용하여 정지 조건을 설정한다 이를 이용한 문제 프로그래머스 SQL 고득점 Kit ..
SQL 고득점 Kit [JOIN 시리즈] 그룹별 조건에 맞는 식당 목록 출력하기 -- 코드를 입력하세요 SELECT A.MEMBER_NAME, B.REVIEW_TEXT, B.REVIEW_DATE FROM MEMBER_PROFILE AS A, REST_REVIEW AS B WHERE A.MEMBER_ID = B.MEMBER_ID AND B.MEMBER_ID IN ( SELECT S.MEMBER_ID FROM ( SELECT MEMBER_ID, COUNT(MEMBER_ID) AS COUNT FROM REST_REVIEW GROUP BY MEMBER_ID ORDER BY COUNT DESC LIMIT 1 ) AS S) ORDER BY REVIEW_DATE #그 중 최대 # SELECT S.MEMBER_ID # FROM ( # SELECT MEMBER..
TIP) 'b' - 'a' = 1 말그대로
[c++] compare 함수 (sort / priority queue) a>b sort: 큰거부터 pq : 작은거부터 ab ; //내림차순 } sort(arr.begin(), arr.end(), compare); 기본 정렬은 오름차순 정렬(1,2,3...) 이며, 내림차순 정렬은 다음과 같다 sort(arr.begin(), arr.end(), greater()); PRIORITY QUEUE priority queue의 compare는 true를 반환해야 swap 부모와 자식의 위치가 swap된다 struct compare{ bool operator()(int a, int b){ return a>b; // true인 경우 부모와 자식이 바뀐다 } }; int main(){ priority_queue pq; // -> 가장 작은 값이 root } struct compare{ b..

728x90