알고리즘 정렬 과정 1. sort() 함수를 이용하여 정렬 시 N은 최대 10,000,000개로 전부 저장 시 메모리가 남아나지 않는다. 2. 입력되는 수는 10,000보다 작거나 같은 자연수 이므로 배열에 count를 올려 기록 3. C와 C++의 표준 stream의 동기화를 끊어 CIN과 COUT의 속도를 높인다. 성공 코드 #include #include #include using namespace std; int main() { // freopen("input.txt", "rt", stdin); ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, in; int input[10001]={0}; cin >> n; for(in..
알고리즘 문자열 정렬 성공 코드 #include #include #include #include using namespace std; struct Word{ int length; string content; Word(string content){ this->length = content.size(); this->content = content; } bool operatorlength != word.length){ return this->lengthcontent> n; for(int i=0; i> w; v.push_back(Word(w)); } sort(v.begin(), v.end()); string tmp = " "; for(int i=0; i
ViewModel의 필요성 안드로이드에서 Activity와 fragment - UI 컨트롤러의 목적 기본적으로 UI 데이터를 표시하거나, 사용자 작업에 반응하거나, 권한 요청과 같은 운영체제 커뮤니케이션을 처리하는 것이다. 이러한 UI 컨트롤러에 데이터 관련 책임을 요구하면 클래스가 팽창되어 다른 클래스로 작업이 위임되지 않고, 단일 클래스가 혼자서 앱의 작업을 모두 처리하려고 할 수 있다. 이렇게 되면 테스트가 훨씬 더 어려워진다. -> 앱의 데이터 또는 데이터에 관한 모든 의사 결정 로직은 UI 컨트롤러 클래스에 포함해서는 안된다. 데이터에 관한 의사 결정 로직을 ViewModel에 추가해야 한다. ViewModel 클래스는 lifecycle을 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계되었..
Room? Room은 AAC(Android Architecture Components)로 간단히 말하면 스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 라이브러리이다. ORM(Object Relational Mapping) 라이브러리로 DB 데이터를 자바 또는 코틀린 객체로 mapping 해준다. SQLite를 내부적으로 사용하고 있지만, DB를 구조적으로 분리하여 데이터 접근의 편의성을 높여주고 유지보수에 편리하다. 다양한 Annotation을 통해 컴파일 시 코드들을 자동으로 만들어주며 LiveData, RxJava와 같은 Observation 형태를 지원한다. MVP, MVVM과 같은 아키텍쳐 패턴에 쉽게 활용할 수 있도록 되어있다. Room 사용 시의 이점 SQL 쿼리의 컴파일 시간 확인 반..
알고리즘 트리 재귀 전위/중위/후위 순회 이진트리를 순회하는 방법에는 전위, 중위, 후위 3가지 방법이 있다. 이진트리에서 보면 전체 트리나 서브 트리나 그 구조는 완전히 동일하다. -> 따라서 전체 트리 순회에 사용된 알고리즘은 똑같이 서브 트리에 적용할 수 있는 것이다. 다만 문제의 크기가 작아진다. 문제의 구조는 같고 크기만 작아지는 경우라면 순환을 적용할 수 있으므로 전체 순회에 사용된 알고리즘을 다시 서브트리에 적용하는 것이 가능해진다. 전위 순회 루트노드 방문 왼쪽 서브트리의 모든 노드 방문 오른쪽 서브트리의 모든 노드 방문 중위 순회 왼쪽 서브트리의 모든 노드 방문 루트노드 방문 오른쪽 서브트리의 모든 노드 방문 후위 순회 왼쪽 서브트리의 모든 노드 방문 오른쪽 서브트리의 모든 노드 방문 루..
알고리즘 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 DFS: 시간 초과 DFS를 이용하여 최단거리를 찾고자 하는 경우 완전 탐색 후 가장 작은 값을 선택하여야 하므로 경로가 많아질 수 있고 이렇게 되면 시간 복잡도가 커진다. #include #include #include using namespace std; int map[101][101], ch[101][101], n, m; int dx[4]={1, 0, -1, 0}; int dy[4]={0, 1, 0, -1}; int cnt=1, minn=2147000000; void DFS(int x, int y){ int xx, yy, i; if(x==n && y == m){ if(cnt