전체 글 42

5일차

오늘 한 것 - 다수의 태그를 검색어로 입력하여 태그 모두에 해당하는 결과 출력하기 - viewholder로 최적화 내일 할 것 - 특정 디렉토리에 있는 파일 리스트들을 가져와서 정보 추출 후 데이터베이스에 등록 - 이 기능 완성 시 기본적인 앱 주기능 구현 완료 참고 blog.yena.io/studynote/2017/12/05/Android-Kotlin-ViewHolder.html [Android][Kotlin] 코틀린 ViewHolder 뷰홀더 ViewHolder의 필요성 ListView에서 발견된 문제점은, 스크롤을 움직이는 등 View가 보이거나 사라지면 그 때마다 findViewById를 통해 convertView에 들어갈 요소를 찾는다는 점이었다. 스크롤 할 때마다 View blog.yena...

4일차

오늘 한 것 - 검색어로 데이터베이스에서 검색한 결과를 리스트뷰로 구현 성공 - 데이터베이스의 데이터 클래스화 - 데이터 입력 시 공백, 중복태그 처리 완료 내일 할 것 - 다수의 태그를 검색어로 입력하여 태그 모두에 해당하는 결과 출력하기 - 특정 디렉토리에 있는 파일 리스트들을 가져와서 정보 추출 후 데이터베이스에 등록 - viewholder로 최적화 참고 blog.yena.io/studynote/2017/12/01/Android-Kotlin-ListView.html [Android][Kotlin] 코틀린 ListView 리스트뷰 ListView가 안드로이드 공부 하면서 특히 어려운 부분인 것 같다. 예제 따라하기만 하다보니 머리가 아파서, 직접 예제를 만들고 한 단계씩 정리해보았다. ListView..

2일차 - 개발 언어 코틀린 도전, 자바와 다른 점 공부

코틀린으로 editText, setText for(i in 0..search_length-1) { if(arrayEditText[i].text.toString().length > 0) { search_set.add('') } } getText 는 editText.text.toString() setText 는 Res_view.setText("text") 코틀린의 nullable 체크 기능 후에 제대로 공부할 것 데이터 베이스 구현 - 데이터 베이스 파일 생성, insert, select 시험 성공 - datatable 에는 파일 정보 저장 - tagtable 에는 태그명과 태그가 적용된 파일의 갯수 저장 다음 할 것 - 파일 정보를 별도의 액티비티에서 입력받아 데이터베이스에 등록 후 검색액티비티에서 검색하..

1일차 - 파일 매니징 앱 Pile manager 개발 착수

현재 구상한 어플의 기능을 구체화 시키는 단계 안드로이드에서 사용자 데이터를 저장하고 사용하는 방법 선택하기 - SharedPreferences를 사용하여 앱의 설정 정보와 같은 간단한 데이터를 보관하는 방법 - 파일 입출력 API를 통해 기기의 저장소(storage)에 데이터를 직접 읽고 쓰는 방법 - SQL을 사용하여 로컬 데이터베이스에 데이터를 관리하는 방법 - 인터넷을 통해 연결된 서버와 데이터를 주고받는 방법 - 그 외 여러가지 그 중에 난 - SQL을 사용하여 로컬 데이터베이스에 데이터를 관리하는 방법을 택할 것인데, SharedPreferences의 키-값(key-value) 저장 형식의 한계점 극복, 파일 입출력 방법의 저장 형식 설계에 따른 복잡성 해소, 서버 통신 방법에서 요구되는 서버..

구현 문제 풀이

문제 1. 럭키 스트레이트 (난이도 1, 풀이시간 5분/20분, 정답) #4:45 N = input() left_list = list(map(int,N[:(len(N)+1)//2])) right_list = list(map(int,N[(len(N)+1)//2:])) left_sum = sum(left_list) right_sum = sum(right_list) if left_sum == right_sum: print('LUCKY') else: print('READY') - 나눗셈(/) 연산 후엔 정수형이 아니라 실수형이라는 걸 명심해두길 문제 2. 문자열 재정렬 (난이도 1, 풀이시간 20분/20분, 정답) #4:58 S = list(input()) num = 0 for x,y in enumerate(S..

그리디 문제 풀이

문제 1. 곱하기 혹은 더하기 (난이도 1, 풀이 시간 19분/30분, 정답(추정)) #6:31 50 #문자열 s : 0~9로 이뤄짐 #숫자사이에 x + 넣으며 연산가능 최대값 , + x 사이 우선순위없음 #결과는 항상 20억 미만 data = list(map(int,input())) # 2 9 0 8 4 # 0이 왼쪽 끝에 있을 때: 오른쪽이랑 + # 0이 오른쪽끝 : 왼쪽이랑 + # 0이 가운데: 0이 이전 인덱스에 있고 현재가 0이 아니면 + #0 + 2 #0 + 2 + 2 # #0 + 2 + 0 + 2 x 2 res = 0 for x,y in enumerate(data): if x == 0 and y == 0: continue elif x == len(data)-1 and y == 0: conti..

최단 경로

최단 경로 알고리즘 - 가장 짧은 경로를 찾는 알고리즘 - 길 찾기 문제 - 다양한 사례 ex - 한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우 - 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우 - 그래프를 이용 / 노드 : 지점, 간선 : 경로 다익스트라 - 가장 비용이 적은 노드를 선택하는 과정 반복 (= 그리디 알고리즘) - 작동 과정 1. 출발 노드 설정 2. 최단 거리 테이블 초기화 3. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택 4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단거리 테이블 갱신 5. 3, 4 반복 1. 출발 노드 설정 노드 번호 1 2 3 4 5 6 거리 0 INF INF INF INF INF - 1에서..

다이나믹 프로그래밍

다이나믹 프로그래밍 (동적 계획법) - 메모리 공간을 조금 더 사용해서 연산 속도를 비약적으로 증가시킬 수 있는 방법 - 사용조건 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다. 재귀적 구현 dyna = [0] * 100 def pibo(x): if x == 1 or x == 2: dyna[x] = 1 return 1 elif dyna[x] != 0: return dyna[x] else: dyna[x] = pibo(x-1) + pibo(x-2) return dyna[x] print(pibo(99)) - 탑다운(메모이제이션, 캐싱, 하향식) 방식 : 큰 문제를 해결하기 위해 순차적으로 작은 문제를 호출하며 해결하는 방식 반복적 구현 dy..

이진 탐색

순차 탐색 - 데이터를 찾기 위해 앞에서부터 하나하나 차례대로 확인하는 방법 - WORST CASE 에는 O(N) 이진 탐색 - 데이터가 정렬되어 있을 때 사용 가능 - 매우 빠르게 데이터 탐색 가능 - 시작점,끝점 가운데의 중간점의 데이터와 찾고자 하는 데이터를 비교하여 범위를 좁혀나가는 방법 - 탐색 범위가 클 때(2000만을 넘거나 데이터 개수가 1000만 단위 이상이면) 재귀함수로 구현 data = [0,2,4,6,8,10,12,14,16,18] def binary_search(start,end,val,data): mid = int((start + end)/2) #print(mid) if val == data[mid]: print("result:",mid) return mid elif val < ..