전체 글 17

Android Kotlin - Navigation Fragment

안드로이드 네비게이션 사용법 데이터 바인딩 기초 작업 1. build.gradle 추가 dependencies { def nav_version = "2.3.3" // Kotlin implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" } 2. 프로젝트 폴더 우클릭 - New - Android Resource File 3. Resource type -> Navigation 설정하고 OK. 4. res -> navigation(새로 생김) -> navi.xml -> new destination 5. Fragmen..

View Model 기초

안드로이드에서 MainActivity나 Fragment에는 View 이외의 것들은 포함시키지 않는 것이 좋습니다. 작고 경량의 앱이면 괜찮을 지 몰라도 어느 정도의 규모가 있는 앱이라면 백엔드나 웹에서 매번 API를 호출한다면 그 비용은 만만치 않을 것 입니다. 그래서 Google에서도 권장하고 있으며 실질적으로 매우 유용한 View Model 클래스를 사용하여 로직을 분리시켜줍니다. 왼쪽의 Activity lifecycle 과 우측의 Viewmodel lifecycle을 비교해보면 onCreate()되는 시점부터 onDestroy(), 파괴되는 시점까지 Viewmodel 은 데이터를 보존합니다. class MainActivity : AppCompatActivity() { private lateinit ..

백트랙킹(Backtracking)

백트랙킹 : 해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법. DFS와 백트랙킹의 차이? - DFS : DFS는 가능한 모든 경로(후보)를 탐색합니다. 불필요할 것 같은 경로를 사전에 차단하거나 하는 등의 해동이 없으므로 경우의 수를 줄이지 못한다. - 백트랙킹 : 해를 찾아가는 도중, 지금의 경로가 해가 될 것 같지 않으면 그 경로를 더 이상 가지 않고 되돌아 가는 것 . 코딩에서 쓸데없는 반복문의 횟수를 줄일 수 있으므로 효율적이다. 이러한 로직을 "가지치기"라고하며 불필요한 부분을 쳐내고 올바른 쪽으로 향한다는 의미이다. 만약 N!의 경우의 수를 가진 문제에서 최악의 경우 여전히 지수함수 시간을 필요로 하므로 처리가 불가능 할 수도 있다. 즉 백트랙킹은 모든 가능한 경우의..

백준 Python - 14698 전생했더니 슬라임 연구자였던 건에 대하여 (Hard)

www.acmicpc.net/problem/14698 14698번: 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) 각 테스트 케이스마다 슬라임을 끝까지 합성했을 때 청구될 비용의 최솟값을 1, 000, 000, 007로 나눈 나머지를 출력한다. 전기 에너지가 전혀 필요하지 않은 경우엔 1 을 출력한다. www.acmicpc.net import heapq import sys mod=1000000007 for _ in range(int(sys.stdin.readline())): n=int(sys.stdin.readline()) e=list(map(int, sys.stdin.readline().split())) ans=1 if n==1: print(1) continue q=[] for i in e: h..

알고리즘/백준 2021.02.15

백준 Python - 1316 그룹 단어 체커

aisiunme.github.io/algorithm/2018/08/13/baekjoon-group-word-checker-1316.md/ 백준 온라인 저지 - 그룹 단어 체커(1316) Baekjoon Problem #1316 - 조건에 맞는 단어를 찾는 문제 aisiunme.github.io Jun Lee 님의 글을 참고하였습니다. 우선 제 코드는 틀렸습니다. cnt=0 for _ in range(int(input())): w={} idx="" word=input() if len(word)==word.count(word[0]) and len(word)>2: continue for i in word: if (i not in w)or idx==i: w[i]=True else: w[i]=False idx=i..

알고리즘/백준 2021.02.14

백준 Python - 2941 크로아티아 알파벳

n=input() c=["c=","c-","dz=","d-","lj","nj","s=","z="] cnt=0 for i in c: if i in n: cnt+=n.count(i) n=n.replace(i," ") print(cnt+len(n.replace(" ",""))) 입력 크로아티아 알파벳 리스트 생성 알파벳 리스트를 돌며 입력한 문자열(n)검색 몇개 있는지 카운트(cnt+)하고 replace로 몽땅 빈 칸으로 변경-> 공백을 없애버리면 이전 문자와 다음 문자가 붙어서 크로아티아 알파벳으로 인식해버린다. cnt 값 + 빈 칸 제거한 n의 길이의 합을 구하면 된다. 내 풀이가 영 찝찝해서 다른 사람의 풀이를 찾아보았다. (실수로 아이디를 확인 못했습니다.) t=input() for i in ['c='..

알고리즘/백준 2021.02.12

순열과 조합 정복하기! 백준 15649~15666번

www.acmicpc.net/workbook/view/2052 문제집: N과 M (시리즈) www.acmicpc.net itertools 사용 1) 순열 from itertools import permutations as p n,m=map(int,input().split()) for i in p(range(1,n+1),m): print(*i) 2) 조합 from itertools import combinations as p n,m=map(int,input().split()) for i in p(range(1,n+1),m): print(*i) 3) 중복 순열 from itertools import product as p n,m=map(int,input().split()) for i in p(range(1,..

알고리즘/백준 2021.02.10