분류 전체보기
[Android] 플래그와 부가 데이터 - feat. Parcelable과 양방향 데이터 바인딩 사용
액티비티를 만들때 보통 Intent를 생성해서 startActivity를 이용해 띄우게 된다. 같은 액티비티가 여러번 띄워지게 되면 중복해서 띄워지게 되는데, 이런 문제는 플래그를 이용하면 해결할 수 있다. 플래그 플래그는 액티비티가 처리되는 방식을 이해해야 이해가 가능하다. 액티비티는 액티비티 매니저라는 객체에 의해 액티비티 스택에서 관리가 된다. 액티비티가 스택에 쌓이고 상위에 있던 액티비티가 사라지면 그 다음 액티비티가 보여지는 방식으로 관리가 된다. 액티비티 매니저가 관리하는 액티비티는 다음 종류와 같다. 화면에 띄워지는 액티비티 (현재 실행중인 액티비티) 스택에 쌓이는 액티비티 (실행중이였다가 정지되는 액티비티) 동일한 액티비티가 여러 번 생성돼서 스택에 들어가는 것 등을 막는 것이 플래그라는 ..
[Android] 인텐트, Intent
안드로이드에서는 다른 액티비티를 화면에 띄우거나 기능을 동작시킬 때, 그리고 데이터를 전달할 때 인텐트를 사용했다. 시스템은 인텐트에 들어있는 명령을 확인하고 다른 액티비티, 혹은 다른 앱을 띄우는 것이다. 인텐트는 개발자가 만든 앱 구성 요소가 해야 할 일을 지정하는 역할을 한다. 인텐트는 android.content 패키지 안에 정의되어있다. 인텐트는 앱 구성 요소 간 작업 수행을 위한 정보를 전달한다. 다른 앱 구성 요소에 인텐트를 전달하는 메서드는 다음과 같다. startActivity() : 액티비티 시작 startActivityForResult() Deprecated -> ActivityResultLauncher 객체의 launch() + registerForActivityResult() st..
<algorithm> STL에서 sort의 comparator 작성 시, invalid comparator 문제
1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 백준에서 해당 문제를 푸는데 문자열을 그냥 정렬하는 문제였다. 근데 sort에서 자꾸 invalid comparator문제가 발생해서 알아보았다. Sort 메서드에서 comparator로 들어오는 매개함수는 반드시 Strict Weak Ordering을 만족해야 한다. 이게 무슨말이냐면, A == B일 경우에는 A B도 false여야 한다는 말이다. 위처럼 comparator를 작성해서 사용했는데, 이 코드에서는 str1..
[C++] 백준 2193번 이친수
DP 문제 이런 류의 DP 문제는 항상 1부터 차례대로 해 보면서 점화식을 세우는 것이 중요하다. 시도 방식 & 문제 풀이 점화식을 구해서 코드로 구현했다. 규칙성이 바로 보이므로 점화식을 찾는데는 문제가 없었다. 근데 여기서 N이 90이 되면 엄청나게 큰 수가 된다. 따라서 dp배열을 int가 아닌, long long형태의 배열로 만들어 주는 것이 중요하다. 처음 시도는 TOP DOWN방식의 재귀형태로 시도했는데, 시간초과가 났다. 그리고 위 방식대로 풀었는데, OVERFLOW가 나서 틀렸습니다 가 나왔다. 자료형을 바꾸고 나서는 바로 맞출 수 있었다. GitHub - kimyunseok/study-record: my study-record my study-record. Contribute to kim..
[C++] 백준 2156번 포도주 시식
다이나믹 프로그래밍 문제. 처음 문제를 보고 예전에 풀었던 계단 오르기와 비슷한 문제라고 생각했다. [C++] 백준 2579번 계단 오르기 다이나믹 프로그래밍 문제. 처음 이문제를 봤을 때 처음에 백트래킹으로 시도했다가 시간초과가 너무 많이났다. (생각해보면 계단 개수가 최대 300개 인데, 이를 고려하면 경우의 수가 2의 지수 kimyunseok.tistory.com 그런데 막상 문제를 풀어보니 엄청 많이 틀렸고, 반례들을 통해 잘못된 점을 알게됐다. 문제 접근방식 우선 조건으로 주어지는 건 간단하다. 최대한 많은 양을 먹어야 하고 3잔을 연속으로 먹는 건 불가능하다. 천국의 계단 같은 경우는 어차피 +1 아니면 +2였기 때문에 이 문제도 똑같은 방식으로 접근했다. 이 두 개 조건을 가지고 문제를 풀려..
[C++] 백준 1912번 연속합
DP 문제. 수를 연속해서 선택하는데, 어떤 경우에 해당하는 번째의 수가 최대값을 가지게 되는지 구하는 문제이다. 문제에 접근한 방식 문제를 읽어보고, DP Bottom Up 방식으로 접근을 시도했다. 값을 더했을 때 계속 양수인 경우, 계속해서 더해주면 그게 구할 수 있는 가장 큰 합이 된다. 값을 더했을 때 음수가 나오는 경우, 그 값을 더하지 않는 것이 더 큰 값이므로 더이상 더해주지 않고 새로 시작한다. 따라서 점화식은 최대값이 An이고, 현재 수가 Bn을 나타낼 때 An = max( A(n-1) + Bn, Bn)이 된다. 이렇게 두 개를 고려하고 문제를 접근하면 된다. 자세하게 고려하고 풀지는 않았는데, 지금 보니 왜 저렇게 생각했는지 풀었으면 더 좋았을 것 같다. 문제풀이 최대값을 갱신시켜 주..
[Android] startActivityForResult Deprecated된 이유와 해결책
startActivityForResult()가 Deprecated되었다. 활동에서 결과 가져오기 | Android 개발자 | Android Developers 개발자 앱 내의 활동이든 다른 앱의 활동이든 다른 활동을 시작하는 것이 단방향 작업일 필요는 없습니다. 다른 활동을 시작하고 다시 결과를 받을 수도 있습니다. 예를 들어, 앱에서 카메라 앱 developer.android.com 위 페이지를 본다면 Deprecated된 이유는 AndroidX Activity와 Fragment에 도입된 Activity Result API 사용을 적극 권장. 결과를 얻는 Activity를 실행하는 로직을 사용할 때, 메모리 부족으로 인해 프로세스와 Activity가 사라질 수 있다. (특히 카메라 같은 메모리를 많이 ..
[Android] 화면 여러개 만들어서 화면 전환하기 - onActivityResult, startActivityForResult Deprecated. registerForActivityResult 사용해보기
화면 전환은 액티비티를 전환하는 것으로 이루어진다. (물론 요즘은 프래그먼트를 이용해서 많이 전환한다.) 그렇다고 액티비티만 안다고 안드로이드 앱을 잘 구성할 수 있는 것은 아니다. 안드로이드의 앱 구성 요소에는 네 가지가 있는데 액티비티는 그 중 한 개일 뿐이다. - 안드로이드 앱 구성요소 네 가지 1. 액티비티 2. 서비스 3. 브로드캐스트 수신자 4. 내용 제공자 앱을 단말에 설치했을 때, 안드로이드 시스템이 이 구성요소 네 가지에 대한 정보를 앱에 요구한다. 이 구성요소들에 대한 정보는 앱 프로젝트에 있는 AndroidManifest.xml 파일에 존재한다. 액티비티 같은 경우 이 파일에 ... 태그로 추가해야 새로 만든 액티비티를 화면에 보여줄 수 있다. 액티비티를 시작하는 방법은 두 가지가 있..
[C++] 백준 1932번 정수 삼각형
다이나믹 프로그래밍 문제. 경우의 수를 나눠서 Bottom Up 방식으로 문제를 해결하면 된다. 처음에 그림을 보고 트리 -> 그래프 탐색인 줄 알았는데 문제를 읽어보고 그림을 그려보니까 다이나믹 프로그래밍이란 것을 알았다. 그림을 보면 각 노드에서 아래로 내려오면서 그 노드의 최대값을 갱신해 나가면 된다. 이 때 방향을 보면 맨 첫번째 노드는 각 전단계의 첫번째 노드에서만 온다는 것을 알 수 있다. 그리고 마지막 노드는 전단계의 마지막 번째의 노드에서만 온다는 것을 알 수 있다. 첫번째, 마지막 둘 다 아니라면 전 단계의 왼쪽, 오른쪽 노드에서 온다는 것을 알 수 있다. 점화식을 세우면 다음 그림과 같다. dp[i][j]는 i, j의 최대값을 저장하는 배열이고 triangle[i][j]는 i, j의 가..
[C++] std::sort 오름차순 내림차순 정렬
greater와 less를 사용한다. int형 vector를 정렬할 때는 오름차순 : sort(vec.begin(), vec.end(), less()); 내림차순 : sort(vec.begin(), vec.end(), greater()); priority_queue 선언할 때와는 다르게 끝에 () 괄호도 추가해야 한다.