Apple is Apple
article thumbnail
[BOJ - 5430] [백준 - 1269] 대칭차집합[Silver - 4] [Solved by Kotlin]
PS/BOJ 2023. 12. 13. 21:04

문제 설명 자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다. 예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다. 입출력 예 입력 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소..

2023-12-11
TIL 2023. 12. 11. 14:51

Architecture 아키텍쳐를 사용하는 이유 일관적인 코드작성 (유지보수, 협업 능률 상승) 생산성 향상 테스트의 용이성 어플리케이션의 개발 방향성을 잡아줌 (동일한 목표) 아키텍쳐의 종류 MVC: model + view + controlller MVP: model + view(viewController) + presenter MVVM: model + view(viewController) + viewmodel MVVM + DataBinding MVI: model + view + intent MvRx(framework-airbnb), Flux(framework-facebook), Ribs, etc.... MVP architecture mvp 아키텍쳐 view - presenter - model 로 분리..

article thumbnail
[BOJ - 5430] [백준 - 28278] 스택2 [Silver - 4] [Solved by Kotlin]
PS/BOJ 2023. 12. 7. 22:02

문제 설명 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. 1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000) 2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다. 3: 스택에 들어있는 정수의 개수를 출력한다. 4: 스택이 비어있으면 1, 아니면 0을 출력한다. 5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다. 입출력 예 입력 첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 출력을 요구하는 명령은 하나 이상 주어진다. 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력 출력을 요구하는 명령이 주어질 때마다 명령의 결과를 ..

2023-12-06
TIL 2023. 12. 6. 20:32

in 키워드 (GENERIC) in 키워드에 대해 알려면 먼저 제네릭에 대해 알아야한다. 제네릭이란? 제네릭은 클래스 내부에서 사용할 자료형을 나중에 인스턴스를 생성할 때 확정한다. 제네릭이 나오게 된 배경은 자료형의 객체들을 다루는 메소드나 클래스에서 컴파일 시간에 자료형을 검사해 적당한 자료형을 선택할 수 있도록 하기 위해서 등장하였다. 제네릭을 사용하면 객체의 자료형을 컴파일 시에 체크하기 때문에 객체 자료형의 안정성을 높이고 형 변환의 번거로움이 줄어든다. 제네릭을 사용하기 위해 앵글 브래킷() 사이에 형식 매개변수를 사용해 선언하고 매개변수는 하나 이상 지정할 수 있다. 제네릭에는 가변성이란 것이 있는데 가변성이란 매개변수가 클래스 계층에 영향을 주는 것을 뜻한다. 가변성에는 공변성, 반공변성,..

2023-12-04
TIL 2023. 12. 4. 22:14

constraint layout란?, 다른 레이아웃과 비교해서 장점은? ConstraintLayout은 각 요소를 부모나 다른 요소에 상대적으로 배치하는데 사용되는 제약 조건을 활용한다. 이는 정확한 위치 지정을 통해 UI를 세밀하게 제어할 수 있게 해준다. 이로써 발생하는 장점에는 다음과 같은 것들을 생각해볼 수 있다. 유연성 및 성능 개선- 다양한 화면 크기와 해상도에 대해 유연하게 대응할 수 있다. 이는 앱이 다양한 디바이스에서 일관된 모양을 유지하면서도, 더 나은 성능을 제공할 수 있도록 도와준다. 간결한 계층 구조 - 기존의 다른 레이아웃과 비교해서 계층 구조가 더 간결합니다. 계층 구조가 단순해지면서 레이아웃의 계산이 빨라지고 메모리 사용이 효율적으로 개선된다. 레이아웃 중첩 최소화 - 중첩된..

2023-12-01
TIL 2023. 12. 1. 21:26

형 변환 코틀린은 정적 타입 언어이기 때문에 컴파일 시에 변수의 타입이 결정되며, 이를 명시적으로 변경하려면 형 변환을 사용해야 한다. 안전한 캐스팅 ‘as?;’ - as? 연산자를 사용하여 형 변환을 한다. 형 변환이 불가능하다면 null을 리턴한다. 안전하지 않은 캐스팅 ‘as’ - as 연산자를 사요한다. 강제 형 변환을 시도하며, 형 변환이 불가능하다면 ‘ClassCastException’ 예외를 발생시킨다. 형 변환은 보통 서로 다른 자료형 간에 데이터를 교환하거나 연산을 수행하기 위해 사용된디. 하지만 형 변환이 언제나 가능한 것은 아니며, 호환되지 않는 자료형 간에 형 변환을 시도하면 예외가 발생할 수 있다. 따라서 형 변환을 필요할 때에는 안전한 형 변환을 시도하고, 예외가 발생하지 않을 ..

2023-11-30
TIL 2023. 11. 30. 19:58

안티 패턴 안티 패턴이란? 안티패턴(anti-pattern)은 소프트웨어 공학 분야 용어이며, 실제 많이 사용되는 패턴이지만 비효율적이거나 비생산적인 패턴을 의미한다. 안티패턴은 1995년 앤드루 케이니그가 디자인 패턴을 참고하여 처음 사용한 말이다. 내가 사용한 안티 패턴 viewModelScope.launch(Dispatchers.IO) { val travelers = homeRepository.getCalculationTravelers( responseCount = 1000, startDate = getPastDateString.first, endDate = getPastDateString.second ) when (travelers) { // APIResponse가 안티 패턴으로 적용 됨 is A..

2023-11-29
TIL 2023. 11. 29. 21:37

Firebase BOM dependencies { // ... // Import the Firebase BoM implementation platform('com.google.firebase:firebase-bom:X.X.X') // BoM을 사용하기 때문에 Firebase들의 버전을 명시할 필요가 없다. // 파이어베이스 컴포넌트 추가 implementation 'com.google.firebase:firebase-auth' implementation 'com.google.firebase:firebase-firestore' } 파이어베이스 공식문서를 따라가다보면 디펜던시를 추가하는 부분이 있다. 여기서 파이어베이스 컴포넌트 이외에에, firebase-bom이란 것을 추가시키는데 이건 어떤 것을 의미하는..

article thumbnail
CI 세팅 중 오류
Git & Github/Trouble shooting 2023. 11. 27. 15:30

원인 및 시도 로컬에서만 관리되는 키 값(local.properties)이 있는데, 이것은 gitignore를 통해 github에 올라가지 않는다. build.gradle에서는 local.properties에 있는 키 값을 가져와 사용을 해야 하는데, github action을 통해 빌드를 하면 local.properties파일이 없기 때문에 정상적인 빌드가 되지 않는다. 그래서 github 상에서 secret으로 값을 주입을 해서 사용해야 되는데 키 값이 제대로 주입이 안되는 현상이 발생하여 build.gradle에서 키 값을 찾지 못해 null로 리턴하는 현상을 발견하였다. A problem occurred evaluating project ':app'. > Parameter specified as ..

[Android] 인앱 업데이트
Android 2023. 11. 24. 09:22

인앱 업데이트 표시 플레이스토어 출시 후, 앱 버전을 올리게 되면 사용자는 앱을 업데이트해야 원활한 앱 사용이 가능하다. 하지만 기본적으로는 앱내에서 업데이트를 알려주지 않기 때문에, 플레이스토어에서 직접 확인하지 않는 한 업데이트 내역을 알아차리긴 힘들다. 여기서 구글의 인앱 업데이트를 전송할 수 있도록 하는 라이브러리가 있다. AppUpdateManager이다. 이걸 활용하면 간단하게 앱 내에서 업데이트를 확인하고 그에 따라 알림을 띄워 볼 수 있다. // update check (app - build.gradle) implementation 'com.google.android.play:app-update-ktx:2.1.0' // 앱 시작 시 앱 버전을 체크함 (activity or fragment)..