RecyclerView 여러가지 항목을 나열하는 목록 화면을 만들 때 사용한다. + 리스트뷰는 androidx 라이브러리에서 리사이클러 뷰를 제공하기 시작하면서부터 잘 사용되지 않는다. RecyclerView의 구성요소 ViewHolder: 항목에 필요한 뷰 객체를 가진다. 필수 Adapter: 항목을 구성한다. 필수 LayoutManager: 항목을 배치한다. 필수 ItemDecoration: 항목을 꾸민다. 뷰 홀더는 각 항목을 구성하는 뷰 객체를 가지며 어댑터는 뷰 홀더에 있는 뷰 객체에 적절한 데이터를 대입해 항목을 완성한다. 레이아웃 매니저는 어댑터가 만든 항목들을 어떻게 배치할지 결정하여 리사이클러 뷰에 출력한다. RecyclerView 사용 1. 리사이클러 뷰 선언 그래들 파일의 depend..
MVP란? Model - View - Presenter로 이루어진 디자인 패턴으로 MVC의 View와 Model 사이의 의존성 문제를 해결하기 위해 나왔다. MVP 패턴의 핵심은 뷰와 모델 간의 상호작용을 다른 객체인 Presenter가 담당하도록 함으로 서로 간의 의존성을 최소화하는 것으로 MVC에서 Controller가 하는 역할을 Presenter가 한다고 보면 된다. MVP의 간단한 과정을 살펴보면 1. User Input이 들어오면 2. View는 Presenter에 이벤트를 전달하고 3. Presenter는 이벤트에 맞게 Model을 구성하고 4. 업데이트된 Presenter의 데이터를 View에 업데이트 한다. View, Presenter, Model의 역할 MVP 패턴 구성요소 뷰 view..
알고리즘 누적 합 1차원 배열의 구간 합 계산 누적합을 이용 5 4 3 2 1이라는 수가 주어지면 1차원 vector v v[1]=5 v [2]=4+v [1]=5+4=9 v [3]=3+v [2]=3+9=12 v [4]=2+v [3]=2+12=14 v [5]=1+v [4]=1+14=15 즉 v[i]는 1번째에서 i번째까지의 수를 더한 값을 나타낸다. v[1] v[2] v[3] v[4] v[5] 5 9 12 14 15 따라서 i번째 수부터 j번째 수까지의 합은 v[i]-v[j-1]을 계산한 값이 된다. v[i] 1~i번째 수의 합 v[j-1] 1~j-1번째 수의 합 틀린 코드: 시간 초과 5 4 3 2 1을 배열에 그대로 저장하여 i번째부터 j번째 수 까지의 합을 구하는 과정을 반복문을 i부터 j까지 돌려 ..
뷰 바인딩을 사용하는 이유 코드에서 XML에 입력한 객체를 사용하기 위해 findViewById() 함수를 이용하는 것은 꽤 귀찮은 방법이다. 이 경우 다음과 같이 id 값으로 뷰 객체를 획득하는데 val textView1: textView = findViewById(R.id.text1) 한 화면을 구성하는 데만도 많은 뷰가 필요하고, 뷰는 대부분 코드에서 이용하므로 -> 코드에서 뷰 객체를 선언하고 모두 findViewById() 함수로 하나하나 가져와야 하므로 번거롭다는 단점이 있다. 개발자들이 조금 더 쉽게 레이아웃 XML 파일에 등록된 뷰 객체를 쉽게 사용하기 위해 뷰 바인딩을 이용하게 되었다. 뷰 바인딩(View Binding)이란? 뷰 바인딩은 레이아웃 XML 파일에 선언한 뷰 객체를 코드에서..
2750번, 2751번 문제 차이와 풀이 방법 같은 수 정렬 문제이지만, 두 문제는 정렬할 수의 개수와 수의 크기 면에서 차이가 있다. 2750번에서 선택정렬을 이용하였고 2751번은 우선순위큐의 최소힙을 이용하였다. 2751번을 선택정렬을 이용하여 실행하니 시간 초과가 발생했다. 즉, 많은 수의 정렬에 있어서는 선택정렬 방법이 효율적이지 못했다. 시간복잡도를 통해 살펴보면 선택정렬은 O(n^2)의 시간복잡도를 가지고 우선순위큐 정렬은 삽입과 삭제 시 모두 O(logn)의 시간복잡도를 가지므로 -> 우선순위큐를 이용하여 정렬하는 방법이 시간 면에서 더 효율적이라는 것을 판단할 수 있다. 2750번: 수 정렬하기 #include int main(){ // freopen("input.txt", "rt", s..
아래 정렬은 모두 오름차순 정렬을 기준으로 정리하였다. 선택정렬(Selection Sort) 가장 작은 수를 찾아 앞으로 보내는 과정을 반복 배열의 처음부터 끝까지 반복문을 통해 돌며 가장 작은 수를 찾는다. 가장 작은 수를 배열의 맨 앞으로 보낸다. 그 다음 배열부터 끝까지 또 작은 수를 찾아 맨 앞으로 보낸다. 이 과정을 배열이 끝날때까지 반복하여 정렬을 한다. 시간복잡도는 O(n^2) #include int main() { freopen("input.txt", "rt", stdin); int a[101], n, tmp, idx, i, j; scanf("%d", &n); for(i=0; i