본문 바로가기

분류 전체보기

(37)
[알고리즘] 조합 ex) 5개 중 3개 뽑는 방법 오늘 모 기업 코딩테스트를 봤는데 조합 문제가 나와서 올려본다. 예: 5개의 숫자 중 3가지를 뽑는 방법... 중복 없이! public class Main { static void combination(int[] arr, boolean[] visited, int start, int n, int r) { if (r == 0) { for (int i = 0; i < arr.length; i++) { if (visited[i]) System.out.print(arr[i] + " "); } System.out.println(""); return; } for (int i = start; i < n; i++) { visited[i] = true; combination(arr, visited, i + 1, n, r ..
[알고리즘] JAVA 정렬 정렬 효율을 위해 필요하다!! 선택 정렬 가장 작은 데이터를 선택해 맨 앞으로 보내고 이를 반복. 가장 작은 데이터를 앞으로 보내는 과정을 n-1번 반복. O(n^2)으로 데이터 10,000개 이상은 느려짐. 삽입 정렬 첫 번째 자리는 정렬되어 있다고 판단하고 두 번째 자리부터 시작. 두 번째 데이터가 어떤 위치로 들어갈지 판단하고 첫 번째 보다 작은지 큰지 비교해 왼쪽 혹은 오른쪽에 삽입. 자신의 위치에서 한칸씩 아래로 내려가며 크기를 비교 후 삽입. O(n^2)으로 리스트가 정렬되어 있는 상태에서 선택 정렬보다 빠르게 동작하여 최선의 경우 O(n)까지 가능. 퀵 정렬 가장 많이 사용되는 알고리즘. 기준(Pivot) 데이터를 설정하고 기준보다 큰 데이터와 작은 데이터의 위치를 바꿈. 호어 분할 방식: ..
[알고리즘] BFS 너비 우선 탐색 BFS란? 가까운 노드부터 탐색. 즉 옆에 있는 것부터 탐색. 큐를 이용하여 구현. BFS 방법 탐색 시작 노드를 큐에 삽입하고 방문 처리. 큐에서 노드를 꺼내 인접 노드 중 방문하지 않은 노드 모두 큐에 삽입하고 방문처리. 2번을 처리할 수 없을 때 까지 실행. public class BFS { public static void Solution(int[][] graph) { Queue queue = new LinkedList(); boolean[] visited = new boolean[graph.length]; queue.add(1); // START visited[1] = true; while (!queue.isEmpty()) { int num = queue.poll(); System.out.pri..
[알고리즘] DFS 깊이 우선 탐색 DFS란? 그래프의 가장 깊은 부분을 우선적으로 탐색하는 알고리즘. 아래로 우선 내려감. 인접 행렬과 인접 리스트로 표현 가능. 인접 행렬: 2차원 배열로 그래프의 연결 관계 표헌. 인접 리스트: 리스트로 그래프의 연결 관계 표현. 메모리 측면에서 인접 행렬은 모든 관계를 저장하기 때문에 메모리 낭비가 많음. 속도 측면에서 특정 노드의 정보를 얻을 때 인접 리스트는 모든 관계를 확인해야하기 때문에 느림. DFS는 최대한 깊이 들어간 후 다시 돌아 오면서 탐색하는 방법을 사용하기 때문에 Stack 사용. DFS 방법 시작 노드를 스택에 삽입하고 방문 처리. 스택 최상단 노드에 방문하지 않은 인접 노드를 스택에 push 후 방문 처리. 방문하지 않은 인접 노드가 없다면 스택에서 최상단 노드 pop.(인접 노..
[Kotlin] 간단 메모장 만들기 6 #Glide #Obseve 일단 이미지 스키마를 만들었다. WriteImage.tk @Entity(tableName = "write_image") data class WriteImage( @PrimaryKey(autoGenerate = true) val _id: Int?, @ColumnInfo(name = "diary_id") val diary_id: Int?, @ColumnInfo(name = "name") val name: String?, @ColumnInfo(name = "count") val count: Int? ) 그리고 메인에서 LiveData를 Observe 하는데 거기서 Diary 뿐만 아니라 WriteImag 도 Observe 하게 변경해 주었다. 그러면 사진이 삭제되어도 변경되고 글이 변경되어도 바뀌기 때문이다...
[Kotlin] 간단 메모장 만들기 5 #Camera #Gallery #PopupMenu 이번에는 카메라에서 사진을 찍어 이미지를 가져오고 갤러리에서 이미지를 불러올 것이다. 참고: https://developer.android.com/training/camera/photobasics?hl=ko 사진 촬영 | Android 개발자 | Android Developers 이 과정에서는 기존 카메라 애플리케이션을 사용하여 사진을 캡처하는 방법을 설명합니다. 클라이언트 앱을 실행하는 기기에서 촬영한 하늘 사진을 조합하여 세계 날씨 지도를 만드는 크라우드 소싱 날씨 서비스를 구현하고 있다고 가정하겠습니다… developer.android.com - Menu WriteActivity에 ImageButton을 넣어 PopupMenu를 띄워준다. WriteActivity.kt private fun show..
[Kotlin] 간단 메모장 만들기4 #RecyclerView #Adapter MainActivity에 RecyclerView가 들어가있는 MainFragment를 넣어서 저장한 리스트를 보여줄 것이다. main_fragment.xml tools:listitem = "여기에 리사이클뷰에 들어갈 뷰를 넣어준다" (위의 요소 하나하나를 담당할 아이템) MainFragment.kt class MainFragment : Fragment() { private lateinit var viewModel: MainViewModel companion object { fun newInstance() = MainFragment() } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState..
[Kotlin] 간단 메모장 만들기3 #LiveData #ViewModel LiveData와 ViewModel을 사용해서 저장되면 바로 데이터가 바뀌게 변경한다. DiaryDao.kt @Dao interface DiaryDao { @Query("SELECT * FROM diary") fun getAll(): LiveData } 기존에 작성했던 Dao에서 LiveData를 추가했다. 그리고 Repository를 작성한다. 여기서 간단하게 데이터를 뿌려주는 역할을 한다. Repository.kt class Repository (application: Application){ private val database = AppDatabase.getInstance(application)!! private val diaryDao = database.diaryDao() private val ..