본문 바로가기

코딩

(102)
Uri에서 썸네일 가져오기 첫번째 함수: Uri에서 rowID를 추출 두번째 함수 : rowID를 통해 썸네일 추출 처음 if문은 무언가 잘못되어서 항목이 없을 때, 두번째 else if 문은 썸네일이 정상적으로 있어서 정상적으로 리턴할 때, 마지막 else문은 "썸네일이 존재하지 않을 때" 진입 함. public Uri thumbnailURIFromOriginalURI(Uri selectedImageUri) { long rowId = Long.valueOf(selectedImageUri.getLastPathSegment()); return uriToThumbnail(""+ rowId); } public Uri uriToThumbnail(String imageId) { String[] projection = { MediaStore..
Uri to path, path to Uri 절대경로 -> uri public Uri getUriFromPath(String filePath) { Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, "_data = '" + filePath + "'", null, null); cursor.moveToNext(); int id = cursor.getInt(cursor.getColumnIndex("_id")); Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id); return uri; } uri -> 절대경로 public String ..
백준 11003 최솟값 찾기 deque를 선언하고 다음을 구현한다 0. x를 읽는다1. 디큐가 비어있으면 x를 디큐에 넣는다.2. 디큐의 front가 슬라이딩윈도우를 벗어나는 값일 경우 디큐에서 뺀다.즉 디큐의 front값의 index와 현재 탐색하는 index의 거리가 윈도우의 사이즈보다 클 경우 디큐에서 뺀다3. 디큐의 back값의 value가 현재 탐색하는 value보다 크거나 같을 경우 디큐에서 뺀다.4. 디큐의 back값의 value가 현재 탐색하는 value보다 작을때 까지 3번을 반복한다 여기서 2번은 쉽게 이해가 되고, 3번을 보자. 만약 디큐에 x라는 값이 들어갔다고 하자,이때 디큐 내부에서 x보다 큰 값은 필요가 없어진다.근거는 다음과 같다.1. 만약 윈도우에 남아 있으면서, x보다 큰 값을 y라고 하자.2. 그런..
백준 11478 서로 다른 부분 문자열의 개수 http://deque.tistory.com/82 위를 통해 lcp를 구한다. 그리고 주어진 string이 가질 수 있는 모든 부분 문자열의 갯수에서 lcp의 총 합을 뺀다.그것이 정답인 이유는 다음과 같다. 1. 어떤 부분 문자열은 어떤 접미사의 접두사이다.2. 그런데 어떤 두 접미사끼리 서로 접두사가 같은 부분이 있다면 그 부분은 부분문자열중 생김새가 같은 문자열이다.3. 따라서 총 부분문자열의 갯수에서 생김새가 같은 문자열(lcp)의 모든 갯수(lcp의 합)을 뺀다. ababc를 예로 들어보자ababc의 접미사는 ababcabcbabcbcc이다.따라서 모든 부분문자열은 ababc => a, ab, aba, abab, ababcabc => a, ab, abcbabc => b, ba, bab, babc..
문자열의 Suffix Array와 LCP 연산 알고리즘 http://deque.tistory.com/82 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; const int MAX = 1000000; int sa[MAX], temp[MAX], pos[MAX], N, delta, lcp[MAX]; char S[MAX]; //pos[x] : S[x:-1]의 그룹 번호 //sa[x] : suffix들을 정렬했을때, x번째 suffix의 index //temp[x] : suffix들을 정렬했을때, x번째 suffix의 그룹번호 //delta : delta*2의 자릿수만 비교할 것이다 bool cmp(int i, int j) { //pos[i]와 pos[j]를 delta 자릿..
백준 9248 Suffix Array https://kks227.blog.me/221028710658https://stackoverflow.com/questions/17761704/suffix-array-algorithm 링크와 주석으로 설명을 대체한다#define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; const int MAX = 1000000; int sa[MAX], temp[MAX], pos[MAX], N, delta, lcp[MAX]; char S[MAX]; //pos[x] : S[x:-1]의 그룹 번호 //sa[x] : suffix들을 정렬했을때, x번째 suffix의 index //temp[x] : suffix들을 정렬했을때, x번째 suff..
백준 4354 문자열 제곱 KMP알고리즘을 수행하면 계산되는 pi배열 ( 다른말로 실패함수)를 이용한다. 다음과 같은 표를 살펴보자(len은 문자열의 길이를 의미) 문자열 pi[len] abab 2 ababab 4 abcabc 3 aaaa 3 asd 0 pi[len]은 문자열의 접두사 = 접미사인 index +1을 가리킨다.즉, pi[len]은 반복되는 문자열의 길이가 반복될 수 있는 최대 길이를 의미한다.이 말은 다른 말로, len - pi[len]이 문자열에서 반복되는 부분문자열의 최소 길이이다.그런데 만약 len-pi[len]이 len으로 나누어 떨어진다면? len은 위에서 말한 부분문자열로만 이루어져있는 것이다.따라서 위의 예시처럼 text[0~len-pi[len]]만큼의 부분문자열이 반복되는 것을 볼수 있다. 한편, le..
백준 1701 Cubeditor KMP알고리즘을 수행할 때 pi를 구한다.그런데 만약 pattern에 2번 이상 반복되는 부분 문자열이 있다면 pi에 그 부분문자열의 길이가 기록 된다. 예를들어 pattern이 aabcaa라고 하자.그렇다면 index가 6일때 접두사와 접미사가 같은 부분이 나오고, pi[6] = 2로 기록된다.그런데 이 값은 접두사와 접미사가 같은 부분의 길이를 의미하기도 한다. 따라서 pi[6]의 값은 pi[0~6]의 최대 길이 중복 부분 문자열의 길이(우리가 구하고 싶은 값)가 된다. 또 다른 예로 pattern을 aabcaabxx라고 하자.이 패턴에서는 index가 6일때 마찬가지로 접두사와 접미사가 같은 부분이 나오고, index가 7일때 또 한번 나온다. (pi[6] = 2, pi[7] = 3)따라서 pi의 ..