목록전체 (195)
코딩하기 좋은날
Notification 이란? Android의 알림에 대해서 알아 보겠습니다. 휴대폰에서 최상단에서 밑으로 드래그를 하면 아래와 같은 알림이 뜬 상태바가 나오게 됩니다. 알림은 일반적으로 아래와 같이 구성 되어 있습니다. 출처 : 구글 공식 문서 알림 개요 | Android 개발자 | Android Developers 알림은 사용자에게 알림, 다른 사람과의 의사소통 또는 앱에서 보내는 시기적절한 기타 정보를 제공하기 위해 Android가 앱의 UI 외부에 표시하는 메시지입니다. 사용자는 알림을 탭하여 열거나 �� developer.android.com 알림은 기본적으로 로컬알림과 원격알림이 존재하며 로컬 알림은 장치에서 앱을 통해 발생 하게 되고 원격 알림은 원격서버에서 장치로 전송하는 알림입니다. 우선..
이 문제는 빌딩을 세워놓고 왼쪽에서 봤을 때 보이는 개수와 오른쪽에서 보이는 개수가 주어진 경우 이를 만족하는 빌딩의 조합이 몇개 있는지 찾는 문제입니다. 높이가 제일 높은거부터 세우고 차례대로 하나씩 세우는 식으로 처음에 생각을 했는데 뭔가 잘 안떠올라서 힌트를 조금 보고 해결했습니다. 결론적으로 높이가 N인 빌딩 까지 세우고 그다음 높이가 N-1인 빌딩을 세운다고 하면 3가지의 경우로 나눌 수 있습니다. 1. 가장 왼쪽에 세우는 경우 2. 가장 오른쪽에 세우는 경우 3. 현재 있는 빌딩들 사이에 세우는 경우 1번의 경우 왼쪽에서 바라보는 개수가 하나 증가합니다. 2번의 경우 오른쪽에서 바라보는 개수가 하나 증가합니다. 3번의 경우 개수의 변화가 없습니다. (N-1 은 현재 가장 작은 빌딩이므로) 1,..
우선 계단 수는 각 자리 수가 모두 1씩만 차이가 나는 수입니다. 아마 이계단 수들의 경우의 수만 구하는 문제도 있는 걸로 알고 있습니다. 그럴 때는 i자리 숫자의 맨앞자리 수를 담은 dp 배열을 통해서 쉽게 해결 할 수 있습니다. 이 문제는 한가지 조건이 더 있습니다. 이러한 계단 수중 0~9 까지의 숫자가 모두 사용 된 경우의 수를 구해야 합니다. 그렇다면 우리는 i 자리의 수가 어떤 수들로 이루어져 있는가?라는 추가 정보를 저장해야 합니다. 잘 생각해보면 숫자는 결국 10개 밖에 없습니다. 이런 식의 체크를 할때 유용하게 쓸 수 있는게 비트마스크를 이용해서 체크하는 것이죠. 외판원 순회에서 비트마스킹을 이용한 dp를 한적이 있습니다. 2^10은 1024니까 메모리 걱정도 없습니다. dp배열의 의미는..
이 문제는 로봇이 1,1에서 N,M까지 가는데 왼쪽,오른쪽,아래로 갈 수 있고 한번 방문한 곳은 못갈 때 최대 값을 구해야 하는 문제입니다. N,M의 제한이 1000이므로 모든 경로를 다보는 것은 1000^3으로 불가능 합니다. 따라서 dp를 이용하여야 하는데 우선은 i,j에서 다음 경로로 이동 할 때 전에 어디서 왔느냐에 따라 갈 수 있는 곳이 제한 됩니다. 예를들어 i,j의 값이 i,j-1에서 온 값이라면 왼쪽 이동이 불가능 합니다. 따라서 dp를 3차원배열로 만들고 풀었습니다. dp[i][j][k] = i,j에서 이전에 k방향에서 왔을 때의 cost 이후 쭉 돌면서 i,j에서 갈수 있는 값을 갱신 시켜 줍니다. 이때 각 행에 대해서 왼쪽에서 오른쪽으로 먼저 진행을 해주고 반대로 오른쪽에서 왼쪽으로도..
지난 글에 이어 각 서비스들의 예제 프로그램을 만들어 보겠 습니다. 먼저 IntentService 는 onHandleIntent 메서드만 오버라이딩 해주면 됩니다. IntentService 아래는 그냥 Log를 찍어보는 예제입니다. IntentService의 서브클래스로 생성 해주면 되고 worker thread의 이름을 매개변수로 넣어주어야 합니다. MyIntentService.kt package com.example.intentserviceexample import android.app.IntentService import android.content.Intent import android.util.Log class MyIntentService: IntentService("MyIntentService..
안드로이드 4대 컴포넌트 중 하나인 Service에 대해서 알아 보겠습니다. Service는 background에서 실행되는 작업을 수행 할 수 있도록 해줍니다. 예를 들면 우리가 앱을 이용해서 어떤 파일을 다운 받는 다거나 다른 작업을 하면서 음악을 계속 듣는 다거나 하는 동작이 필요 할 때 사용 할 수 있습니다. Thread 서비스를 알기 전에 먼저 thread의 개념에 대해 알고 있어야 합니다. 운영체제를 배우셨다면 많이 들어 보셨을텐데 간단하게 독립된 실행 단위 라고 생각하시면 될 것 같습니다. 프로세스 내에서 동시에 여러가지 작업을 해야 할 때가 있는데 이때 각각의 thread를 생성하여 작업들을 병렬적으로 처리 해 주면 됩니다. 안드로이드 애플리케이션은 처음 시작되면 런타임 시스템에서 하나의 ..
블루 턱걸이로 들어가고 한동안 쉬다가 어제 열린 edu 코포를 참가했습니다. 아주 운이좋게 4솔을 해서 레이팅이 떡상한 기념으로 글을 씁니다! (A) Shovels and Swords 요즘 뭔가 A번이 어려운거 같은 느낌이,, A번 4번 틀려서 시작부터 멘탈이 나가서 망했다 싶었는데,, 뒤에 문제가 잘풀려서 다행이었습니다. 이문제는 두수 a,b를 입력 받은뒤 만들 수 있는 shovle 과 sword의 최대 개수를 구하는 문제인데 작은수의 2배보다 큰수가 크면 작은수가 무조건 답이고 그렇지 않다면 저는 큰수와 작은수의 차이를 계산해서 그개수만큼 만들고,(만들 수 있다면) 남은 두 재료의 개수가 같아지므로 /3*2 한 값만큼 더해서 여차여차 했는데 b번보다 이게 더 어려운 거 같습니다,, (B) Shuffl..
오늘은 안드로이드 4대 컴포넌트 중 하나인 BroadCast Receiver에 대해서 알아 보겠습니다. BroadCast Intent 먼저 그전에 BroadCast Intent에 대해서 얘기를 해보겠습니다. 기본적으로 Intent는 액티비이를 론칭 하는데 사용이 되는데 시스템의 다른 컴포넌트들에게 시스템 차원의 메시지를 전달하는데도 사용 할 수 있습니다. BoradCast Intent는 Activity 클래스의 sendBroadcast() / sendOrderedBroadcast() 메서드를 호출하여 전파할 수 있습니다. 둘의 차이점은 모든 리시버에게 broadcast를 전송하느냐 / 한번헤 하나의 리시버에게 순차적으로 전송하느냐의 차이를 가집니다. sendOrderedBroadcast는 우선순위를 지정..