목록2024/12 (11)
성장기록지
공식문서의 말대로 Jetpack Navigation을 사용한다면 큰 의미가 없겠지만,프래그먼트를 사용하는 모든 앱은 어느 정도 FragmentManager를 사용하므로Fragment Manager가 무엇이고 어떻게 작동하는지 파악하는 것이 중요하다 생각하여 학습을 진행한다.FragmentManager앱 프래그먼트에서 프래그먼트를 추가, 삭제 또는 교체하고 백 스택에 추가하는 등의 작업을 실행하는 클래스이다.Activity, Fragment에서 접근가능하다. FragmentActivity 에서 구현하므로, 해당 및 서브클래스에서는getSupportFragmentManager() 메서드를 통해 FragmentManager에 액세스할 수 있다. 아래와 같은 Fragment Manager가 있다고 하자.Hos..
진행한 프로젝트의 콜백지옥을 해결하기 위해 여러 학습을 진행 중suspend 함수의 내부 구조에 대해 학습하게 되었다.많은 학습량이 있지만 우선 CPS에 대한 이론을 다뤄보겠다.Kotlin 컴파일러가 suspend 키워드를 만났을 때코루틴은 Continuation Passing Style(CPS) 형태로 동작한다.CPS는 호출되는 함수에 Continuation을 전달하고, 각 함수의 작업이 완료되는 대로 전달받은 Continuation을 호출하는 방식을 말한다.그렇다면 Continuation 이란 뭘까? Continuation 인터페이스를 한번 알아보도록 하겠다.Continuation 인터페이스에는 크게 context객체와 resumeWith() 함수가 있다.context는 각 Continuation이 ..
문제풀이 예시와 같은 ABCDE가 있다는 뜻은, 그래프 안의 특정 노드에서 5개 이상 연결되어있는 것이 있는지 묻는 것과 같다.따라서 dfs를 통해서 그래프들을 탐험하게 하였고, 그중에 5개의 이상 노드가 연결되어 있을 때 (cnt>=4 일 때)ans를 1로 만들어 1을 출력하게 하였다.from collections import defaultdictimport sysinput = sys.stdin.readlinelimit_number = 15000sys.setrecursionlimit(limit_number)dic = defaultdict(list)n,m = map(int,input().split())for i in range(m): a,b= map(int,input().split()) dic..
Set이란?데이터를 저장하는 추상자료형이다.순서를 보장하지 않고, 데이터의 중복을 허용하지 않는다.데이터 조회속도가 List보다 빠르다. 자바에서의 Set자바에는 Hash Set, Linked Hash Set, Tree Set이 있다. 자주 쓰이는 Hash Set에 대해 중점적으로 살펴보자 Hash Set Hash Table을 사용하기 때문에, 크기 상관없이 데이터 조회가 빠르다.Hash Set은 어떻게 구현되어있나 살펴본다면, Hash Map을 사용하는것을 알 수 있다.따라서 자바에서는 HashMap과 HashSet은 동일하다고 볼 수 있다. Hash Set의 삽입Hash Set에서 데이터를 삽입(add)할때를 보자, 다음과 같이 Key값으로 e를 넣고, Value를 통해 PRESENT라는 객체를 넣..
.문제https://www.acmicpc.net/problem/14888초기 풀이많이 생각할 것 없이, 백트래킹을 통해서 문제를 해결하면 된다 .처음에는 아래와 같이 연산자들을 담는 giho라는 리스트를 활용해서 연산을 진행해주었다.하지만 그러기 위해선 visited 리스트도 활용해야 하였고, visited에 있는지 확인해주느라 시간이 많이걸렸다.n=int(input())nums = list(map(int,input().split()))lst = list(map(int,input().split()))giho = []for i in range(lst[0]): giho.append('+')for i in range(lst[1]): giho.append('-')for i in range(lst[2]..
Hash란?입력 데이터를 고정된 값으로 변환한 값이다. 해시 값이라고도 부른다.해시 값은 해시함수(hash function)에 의해서 얻게 된다.아래의 그림과 같은 방식으로 변환이 된다.이렇게 정수로 변환된 해시는 배열의 인덱스, 위치, 데이터 값을 저장하거나 검색할 때 활용된다. 해시 함수(Hash Function)란임의의 데이터를 고정된 길이의 값으로 리턴해주는 함수위에서 언급했듯이 해시 함수(Hash function)는 입력받은 데이터를 해시 값으로 출력시키는 알고리즘을 말한다. 해시 테이블(Hash Table)란배열과 해시 함수를 사용해서 map을 구현한 자료구조이다.일반적으로 상수시간에 접근하기 때문에 빠르다. 해싱(Hashing)이란?해싱은 해시 함수에서 해시를 출력하고, 해시 테이블에 ..
Data Class란?오직 데이터를 실어담을 수 있는 객체를 만들고 싶을 때 사용한다.일반 클래스와 다르게, 다양한 메소드를 자동으로 생성해주는 클래스이다.구성되는 메소드들은 아래와 같다.toString()hashCode()copy()equals()toString()componentsN()또한 아래와 같은 특징들을 가지고 있다. 기본 생성자에 1개 이상의 파라미터가 있어야 함기본 생성자의 파라미터가 val 또는 var 로 선언해야 함다른 클래스를 상속받을 수 없음 ( sealed 클래스는 상속받을 수 있으며, 인터페이스는 구현할 수 있다.)abstract, open, sealed, inner 등 키워드를 붙일 수 없음자동으로 생성한 메소드를 오버라이딩할 경우, 오버라이드 된 메소드 사용아래에선 하나씩 어..
추상 클래스와 인터페이스의 차이를 설명하세요코틀린이랑 그렇게 친하지 않은 사람은 별 차이가 없다고 생각을 할 수 있다.명확한 차이를 확인하도록 기능적 차이와 개념적 차이를 하나씩 파헤쳐 보도록 하겠다독자는 추상 클래스와 인터페이스가 뭔지는 안다는 가정하에 작성해보겠다.기능적 차이1. 인터페이스는 생성자를 만들 수 없다.인터페이스는 추상클래스와 다르게 생성자를 만들 수 없다.왜 이렇게 구성하였는지의 의도는 개념적 차이에서 보충하겠다.2. 인터페이스는 프로퍼티의 상태 저장이 불가능하다.간단한 예시와 함께 보여드리겠다.추상클래스는 다음과 같이 값을 지정해 둘 수 있다.하지만 인터페이스는 다음과 같이 상태 저장이 불가능하다.왜 인터페이스는 상태 저장이 안되게 만들었을까? 이것도 중요한 내용이니이후에 다룰 개념적..
문제https://www.acmicpc.net/problem/2668풀이아래줄의 숫자가 윗줄과 같을 때, 그래프에 넣어준다고 하면 예시 문제는 다음과 같이 표현할 수 있다.1: [2, 3]2: []3: [1]4: [6]5: [4, 5]6: [7]7: [] 이 그래프를 그림으로 그린다면,아래와 같이 표시할 수 있게 된다. 정답인 1,3,5가 사이클로 돌아가는 것을 알 수 있다. 이 문제는 그래프를 dfs탐색하여, 사이클이 생길때마다 것을 정답 리스트에 보관하여 해결할 수 있는 것이다.풀이 코드from collections import defaultdictn=int(input())dict = defaultdict(list)def dfs(x, visited): visited.add(x) check..
xml을 활용한 개인 프로젝트를 통해 Jetpack Room을 사용해보려고 한다!하지만 유명한 기술이라고 꼭 Room을 사용해야 할까? 다른 대안은 없을까? 하는 마음에사용 근거에 대해 조사하고, 그런 김에 기본적인 사용법도 학습하고자 한다!실제 사용 후 얻는 깨달은 점들도 추후 기록하고자 한다!Jetpack Room이란?Android의 SQLite 데이터베이스를 쉽게 사용할 수 있도록 도와주는 Jetpack 라이브러리이다.SQLite란?SQL(Structured Query Language)을 사용해 데이터를 관리하며,애플리케이션 내에서 데이터베이스 파일을 직접 생성하고 사용할 수 있게하는 라이브러리이다.안드로이드에선 앱을 종료해도 데이터가 남아있게 하고 싶을 때 사용한다.데이터베이스 엔진이다.모든 데이..