전체 글
-
[Python] Union - Find 유니온 파인드/서로소 집합algorithm/개념 2023. 6. 16. 17:32
🔎 Union Find (서로소 집합) 란? 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 1. 합집합 (Union) : 두 개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산 Union (A,B) : A와 B를 하나의 집합으로 합치는 연산 1) A와 Bdml 루트 노트 A', B' 를 각각 찾는다. 2) A'를 B'의 부모 노드로 설정 모든 합집합 연산을 찾을 때까지 위 과정을 반복한다. 2. 찾기 (Find) : 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산 📋 example) Union(1,4) Union(2,3) Union(2,4) Union(5,6) 을 해보자 - 유니온 파인드는 루트 노드에 즉시 접근할 수 없고 부모 테이블을 계속 확인해서 거슬러 올라가야 ..
-
[Andorid] local.properties를 이용하여 API URL, KEY 안전하게 숨기기AOS 2023. 6. 13. 20:24
앱 배포 시에 API URL 또는 API KEY를 안전하게 숨기기 위해 local.properties 파일을 사용하는 방법이 있다. 1. local.properites 파일을 연다 BASE_URL="https://example.com/api" 파일에 api url을 추가한다. 2. 필요한 모듈의 gradle 파일을 연다. (build.gradle) android { compileSdk rootProject.ext.compileSdkVersion defaultConfig { minSdk rootProject.ext.minSdkVersion targetSdk rootProject.ext.targetSdkVersion // 추가 def localProperties = new Properties() localP..
-
[🏝 이펙티브 코틀린] 3 재사용성Book/Effective Kotlin 2023. 6. 12. 00:50
3장 재사용성 ⚾️ item 19 knowledge를 반복해서 사용하지 말라 knowledege = 의도적인 정보 = 로직, 공통 알고리즘 공통 knowledge가 있다면 이를 추출해서 변화에 대비해야 한다. 비즈니스 규칙이 다른 곳에서 왔다면, 독립적으로 변경될 가능성이 높기 때문에 추출을 하면 안된다. 단일 책임 원칙 : 클래스를 변경하는 이유는 단 한가지여야 한다. ⚾️ item 20 일반적인 알고리즘을 반복해서 구현하지 말라 대부분 stdlib 에 정의되어 있을 가능성이 높다. stdlib 에 없는 일반적인 알고리즘 또는 특정 알고리즘을 반복해서 사용해야하는 경우는 프로젝트 내부에 직접 정의해라(확장 함수로 정의하는 것이 좋다) ⚾️ item 21 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어..
-
[Kotlin] Generic 제네릭이란?, variance : in, outKotlin 2023. 6. 8. 01:15
제네릭이란? 이렇게 생긴 코드를 많이 봤을 것이다. 이게 바로 제네릭이다. 제네릭을 사용하면 타입 파라미터 (type parameter)를 받는 타입을 정의할 수 있다. 예를 들어, List라는 타입이 있다면 그 안에 들어가는 원소의 타입을 정의한다. val members: List = listOf("A","B","C") >> members 는 문자열을 담은 리스트다. ( 그냥 리스트가 아니라 ) Map 클래스는 key 타입과 value 타입을 타입 파라미터로 받으므로 Map가 된다. 이런 제네릭 클래스에 Map 처럼 구체적인 타입을 타입 파라미터로 넘기면 타입을 인스턴스화할 수 있다. Java와 다르게 Kotlin에서는 제네릭 타입의 타입 인자를 프로그래머가 명시하거나 컴파일러가 추론할 수 있어야 한다..
-
[🏝 이펙티브 코틀린] 2 가독성Book/Effective Kotlin 2023. 6. 6. 00:09
🏀 item 11 가독성을 목표로 설계하라 개발자가 코드를 작성하는데는 1분 걸리지만, 이를 읽는 데는 10분이 걸린다. 숙련된 개발자만을 위한 코드는 좋은 코드가 아니다. 🏀 item 12 연산자 오버로드 할 때는 의미에 맞게 사용하라 연산자 오버로드 할 때는 의미에 맞게 사용해야 한다. 꼭 연산자 같은 형태로 사용하고 싶다면 infix 확장 함두 또는 톱레벨 함수 활용해라. infix 란? infix fun Int.add(x: Int): Int { return this + x } fun main() { println(3.add(5))// 8 println(3 add 5)// 8 } 3.add(5)와 같이 호출 할 수도 있고, infix를 붙어 있는 것만으로 3 add 5와 같이 중간 기법으로 사용하는..
-
[🏝 이펙티브 코틀린] 1 안정성Book/Effective Kotlin 2023. 6. 6. 00:04
⚽️ item 1 가변성을 제한하라 var 보다는 val 사용 하기 mutable 보다는 immutable 사용 (property, 객체, class 등) 데이터 클래스를 변경한다면 immutable 로 만들고 copy 하자 mutable 객체를 외부에 노출하지 말자 1. 읽기 전용 속성 val val 을 var로 오버라이드 할 수 있다. 읽기 전용 ≠ 가변성 val은 읽기 전용 속성이지만, 변경할 수 없음을 의미하는 것은 아니다. mutable 객체를 담고 있다면, 내부적으로 변할 수 있음 2. 가변 컬렉션과 읽기 전용 컬렉션 구분하기 읽고 쓸 수 있는 컬렉션 ≠ 읽기 전용 컬렉션 읽기 전용 컬렉션 ≠ 가변성 다운캐스팅 X 읽기 전용 컬렉션을 mutable 컬렉션으로 다운캐스팅 하지말아라 읽기 전용 >..
-
[Kotlin] Scope Function : apply, run, with, also, let 정리Kotlin 2023. 5. 28. 23:53
🔎 Scope function 란? 제공된 람다 식이 있는 객체에서 이러한 함수를 호출하면 임시 범위가 형성 되는데, 이 범위 내에서는 이름 없이 개체에 접근할 수 있습니다. 즉 특정 범위 {} 안에서 특정 객체를 this 나 it 을 통해 접근 및 조작이 가능한 함수입니다. scope function은 코드를 더 간결하고 읽고 쉽게 만들 수 있습니다. scope function 은 두가지 구성 요소로 이루어져 있는데 수신 객체(receiver) 와 수신 객체 지정 람다 입니다. 여기서 수신 객체는 확장 함수가 호출되는 대상이 되는 객체 입니다. 수신 객체 지정 람다는 나머지 구성요소인 block 부분 입니다. 이러한 함수는 총 5가지로 apply, run, with, also, let 가 있습니다. a..
-
[Python]프로그래머스/베스트앨범/해시algorithm/문제 2023. 5. 26. 21:07
https://school.programmers.co.kr/learn/courses/30/lessons/42579 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ⚡️ 문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는..