[프로그래머스/Kotlin]Level3 - 가장 긴 팰린드롬
·
프로그래머스/Kotlin | Level3
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다. 제한사항 - 문자열 s의 길이 : 2,500 이하의 자연수 - 문자열 s는 알파벳 소문자로만 구성 ​입출력 예 s answer "abcdcba" 7 "abacde 3 입..
[프로그래머스/Java]Level3 - 숫자 게임
·
프로그래머스/Java | Level3
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다. 먼저 모든 사원이 무작위로 자연수를 하나씩 부여받습니다. 각 사원은 딱 한 번씩 경기를 합니다. 각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다. 만약 숫자가 같다면 누구도 승점을 얻지 않습니다. 전체 사원들은..
[Android/Error]java.lang.NumberFormatException: Expected an int but was 106112471000
·
Android/에러 및 이슈 사항
위와 연결하여 로또 당첨번호를 받아오는 도중 다음과 같은 에러를 만났다. 느낌에 106112471000를 포맷화할 수 없어 생긴 오류 같았다. 106112471000는 해당 로또 회차의 총 판매금액이었고, 이걸 나는 Int로 받아오고 있었다. 받아오는 변수 타입을 Long으로 바꿔주면 된다. long 최대값 : 9,223,372,036,854,775,807 int 최대값 : 2,147,483,647
[Android/Gradle]Gradle에서 APK 생성 타입 설정하기
·
Android/Android 기초
Gradle에서 APK 생성 타입 설정하기 회사에서 apk를 추출하는데 자동으로 이름이 생성이 되고, 직접 폴더를 만들어 그 폴더에도 저장이 된다. gradle에 해당 코드가 있었고, 찾아보니 gradle을 통해 설정할 수 있는 기능이었다. 1. apk 생성 시 빌드타입, 날짜, 버전명 자동 기입 build.gradle (:app) android { ... buildTypes { ... applicationVariants.all { variant -> variant.outputs.all { def name = parent.project.getName() def buildType = variant.buildType.name def versionName = variant.versionName outputFi..
[Android/Basic]BaseActivity
·
Android/Android 기초
BaseActivity란? 여러 Activity를 사용할 때 중복되는 코드를 미리 정의하여 필요한 코드만 구현하도록 사용하는 기본 액티비티 T: ViewDataBinding , R: BaseViewModel => 코드의 중복을 줄이고 가독성 강화 AppCompatActivity란? setSupportActionBar(Toolbar) API를 사용하여 action item, navigation mode 등을 포함하는 action bar를 지원 Theme.AppCompat.DayNight 테마를 사용하며 AppCompatDelegate.setDefaultNightMode(int) API를 사용하여 다크 모드를 지원 getDrawerToggleDelegate() API를 사용하여 DrawerLayout과 통합
[Android/Jetpack]ViewModel + Databinding + LiveData
·
Android/Jetpack
구현을 위한 이전글 [프로그래밍]MVVM 패턴 MVVM패턴이란? View - ViewModel - Model View: 사용자에게 보이는 화면 ViewModel: View를 표현하기 위해 만든 View를 위한 Model && View를 나타내주기 위한 데이터 처리 담당 Model: 어플에서 사용되는 데이터 및 anovice-dp.tistory.com [Android/Jetpack]Databinding 사용하기 (1) 기본 세팅 build.gradle (java는 아래 코드만 추가) android { ... dataBinding { enabled = true } ... } build.gradle (kotlin의 경우, 아래 코드도 추가) apply plugin: 'kotlin-kapt' ... depend..
[Android/Jetpack]LiveData
·
Android/Jetpack
LiveData란? 식별 가능한 데이터 홀더 클래스. 스스로 수명주기를 인식함 Data의 변경을 관찰할 수 있는 Data Holder 클래스 UI와 데이터 상태의 일치 보장 메모리 누출이 없음 비정상 종료가 없음 수명주기를 자동으로 관리 최신의 데이터 유지 기기회전 등 프래그먼트나 액티비티가 재생성되어도 데이터의 변화가 없음 ViewModel과 함께해야 효과가 커짐 ViewModel 안에 있는 LiveData 객체를 DataBinding을 통해 UI에서 관찰만 할 수 있도록 만들면 액티비티나 프래그먼트에서 일일히 데이터를 갱신할 필요 없이 알아서 UI에 최신 데이터가 보이게 될 것 Observable과 다르게 LifeCycle을 알고있음 → 활성(active:STARTED/RESUMED)상태일 때만 데이..
MVVM 패턴
·
개발/소프트웨어 디자인 패턴
MVVM패턴이란? View - ViewModel - Model View: 사용자에게 보이는 화면 ViewModel: View를 표현하기 위해 만든 View를 위한 Model && View를 나타내주기 위한 데이터 처리 담당 Model: 어플에서 사용되는 데이터 및 데이터 조작 부분 (ex. 서버에서 들어오는 데이터) 동작순서 사용자의 Action이 View를 통해 들어옴 Command 패턴을 이용해 ViewModel에 Action을 전달 ViewModel이 Model에서 데이터를 요청하고, Model은 ViewModel에서 요청받은 데이터를 전달 ViewModel은 응답받은 데이터를 가공 및 저장 View는 ViewModel과의 Data Binding을 이용해 화면 갱신 특징 View와 Model 사이 ..
[Android/Jetpack]Databinding 사용하기
·
Android/Jetpack
(1) 기본 세팅 build.gradle (java는 아래 코드만 추가) android { ... dataBinding { enabled = true } ... } build.gradle (kotlin의 경우, 아래 코드도 추가) apply plugin: 'kotlin-kapt' ... dependencies { ... // 버전은 본인 gradle 버전으로 작성 kapt 'com.android.databinding:compiler:3.5.3' ... } (2) xml 수정 activity_main.xml ... 기존 xml 태그 최상위에 이라는 태그로 전체를 감싸줌 태그 안에는 xml에서 사용할 변수들을 태그를 이용해 작성해줌 (3) kotlin 파일 수정 MainActivity.kt private l..
[Android/Library]Eventbus
·
Android/도구 및 라이브러리
EventBus란? 버스 네트워크의 동작 방식과 유사하게 하나의 이벤트를 동일 채널에 연결된 모든 노드(Subscriber)들에게 보내는 방식 각 노드들은 채널에 연결되어 있기만 하다면 이벤트를 채널에 보내는 얕은 결합으로도 간단하게 데이터를 전달받을 수 있음 class MainFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) //코드 } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: ..
[Android/Async]Coroutine
·
Android/도구 및 라이브러리
Coroutine이란? 참고 Co(협력)+Routine(하나의 태스크, 함수) Routine에는 두가지가 존재: Main Routine, Sub Routine Sub Routine은 Main에서 호출하는 시점에서 진입, return을 만나면 탈출 Coroutine은 함수에 진입할 수 있는 진입점도 여러개, 빠져나가는 탈출점도 여러개 return 문이나 마지막 닫는 괄호를 만나지 않더라도 언제든 나가고 들어갈 수 있음 // 스레드의 main 함수가 drawPerson()을 호출하면 하나의 코루틴 블럭(함수)이 생성됨 // drawPerson()은 언제든 진입, 탈출할 수 있는 자격이 주어짐 fun drawPerson() { /* 실제로 startCoroutine은 없음. 직관적 이해를 위해 이 코드에서만 ..
[Android/Async]RxJava
·
Android/도구 및 라이브러리
RxJava란? RxJava는 ReactiveX(Reactive Entensions)를 Java로 구현한 라이브러리이다. RxAndroid는 RxJava에 안드로이드용 스케쥴러 등 몇 가지 클래스를 추가해 안드로이드 개발을 쉽게 해주는 라이브러리이다. RxJava는 반응형 프로그래밍이다. 반응형이란? 데이터가 변하면 알아서 캐치하여 결과로 반영됨. (데이터 관찰, 스트림 처리) RX = Observable + Observers + Schedulers Observable이란? RxJava의 가장 핵심적인 요소 데이터 흐름에 맞게 알림을 보내 Observer가 데이터를 사용할 수 있도록 함 즉, Observable을 이용해 데이터를 회수하고 변환하는 메커니즘을 정의하고, Observer는 이를 구독해 데이터..
참조
·
개발/개념 및 기법
안드로이드 프로젝트를 만들면서 문제점을 하나 만났다. 현재 화면에서 보여주고 있는 ListA가 있다. 그리고 서버와 통신해서 데이터를 받아와 ListA를 누적하는 ListB가 있다. 순서1 : ListA(0개) -> ListB(20개) 순서1 : ListA(20개) -> ListB(40개) ListA는 최초에 0개이다. ListA는 ListB보다 언제나 작다. 아이템의 개수를 비교하여 차이나는 아이템만큼 화면에 띄워진 리스트를 업데이트 하려고 한다. 그런데 ListA가 ListB와 언제나 똑같다면? 그래서 리스트가 가진 아이템의 차이를 화면이 파악하지 못한다면? 이유는 참조에 있다. ListA가 현재 띄워져있는 리스트이자, 화면을 띄우기 위한 어댑터에 연결되어 있는 리스트이다. ListA에 변경된 Lis..
[Kotlin]Typealias VS Inline Class
·
프로그래밍 언어/Kotlin 기초
1. typealias 변수들에 대한 새로운 별명을 지어주고, 짧게 사용 가능 typealias를 클래스 혹은 함수 내에서 정의하는 것은 불가능하다 typealias는 누구나 접근할 수 있는 Top Level 변수이다 동일한 type을 여러 개의 이름*으로 사용할 수 있다. ex1-1. typealias NodeSet = Set ex1-2. typealias FileTable = MutableMap ex2-1. typealias MyHandler = (Int, String, Any) > Uit ex2-3. typealias Predicate = (T) -> Boolean PermissionDialog 클래스를 PermissionDialogCallback으로 정의 (PermissionDialog) -> U..
[Kotlin]Deligation
·
프로그래밍 언어/Kotlin 기초
Deligation Pattern 참고링크 Deligation Pattern(위임 패턴)이란, 객체가 상송과 동일하게 코드 재사용을 할 수 있도록하는 객체지향 디자인 패턴이다. 예제소스 (kotlin) class Rectangle (val width: Int, val height: Int) { fun area() = width * height } class Window (val bounds: Rectangle) { // Deligation fun aread() = bounds.area() } 코틀린에서는 Deligation에 대한 특별한 기능이 내장되어 있어 다음과 같이 작성할 수 있다. interface ClosedShape { fun area() : Int } class Rectangle (val w..
뿌꾸 빵
'분류 전체보기' 카테고리의 글 목록 (10 Page)