Algorithm (69) 썸네일형 리스트형 [Array] Longest Common Prefix from leetcode 나의 답function longestCommonPrefix(strs: string[]): string { let preStr: string = strs[0] for (const str of strs) { if (str.length 시간복잡도 / 메모리 거의 최하위 ㅋㅋ 1. 문제접근strs배열에서 가장 짧은 string을 찾는다 (prefix이므로, 가장 긴 prefix의 길이는 가장 짧은 string을 넘을 수 없음)가장 짧은 string의 길이만큼 반복하면서 한글자씩 모두 동일한지 검토한다모두 동일하지 않은 시점에서 리턴 2. 내가 한 실수 / 고민시간 복잡도를 크게 고려하지 않음 3. 핵심 아이디어가장 짧은 문자열 기준으로 비교 4. 시간 복잡도.. 구현 알고리즘 테스트에서 구현 문제란 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제 즉, 프로그래밍 언어/문법/라이브러리에 대한 이해도가 높아야 함 * 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 말그대로 이전 1 2 3 4 ··· 9 다음