전체 글 278

[백준] 26169 (세 번 이내에 사과를 먹자)

#1 알고리즘 그래프 - 깊이 우선 탐색 (DFS, Depth-First Search)#1 그래프의 탐색 깊이 우선 탐색 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 깊이 우선 탐색 깊이 우선 탐색의 애니메이션 예시 깊이 우선 탐색( - 優先探索, 영어: depth-fkenel.tistory.comdfs를 이용했다. 한 단계식 정복해가며 차근차근 나아가는 너비 우선 탐색과 달리, 깊이 우선 탐색은 '한 방향으로 갈 때까지 가보기'를 반복한다. 따라서 bfs보단 dfs가 이 문제에 어울린다. 이 문제에서는 최대 3번 이동해야 한다는 제한이 있다. 깊이 우선 탐색 알고리즘을 살짝 고쳐서, 문제에서 제시한 깊이까지만 수행되도록 만들었다. #2 코드 - 코틀린#2-1 성공한 코드// 추가..

[백준] 7569 (토마토)

#1 알고리즘 그래프 - 너비 우선 탐색 (BFS, Breadth-First Search)#1 그래프의 탐색 너비 우선 탐색 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전.ko.wikipedia.org그래프의 각 정점을 한번씩 방문할 필요가 있다고 해보자. 그 방문의 방kenel.tistory.com #2 코드 - 코틀린import java.util.*var X = -1 // Mvar Y = -1 // Nvar Z = -1 // Hlateinit var tomatoes: Array>>const val RIPE_TOMATO = 1const val UNRIPE_TOMATO = 0const val RESULT_CANT_RIPEN_ALL = -1fun main() { val boxSiz..

[백준] 2178 (미로 탐색)

#1 알고리즘 그래프 - 너비 우선 탐색 (BFS, Breadth-First Search)#1 그래프의 탐색 너비 우선 탐색 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전.ko.wikipedia.org그래프의 각 정점을 한번씩 방문할 필요가 있다고 해보자. 그 방문의 방kenel.tistory.combfs 알고리즘으로 풀었다. #2 코드 - 코틀린import java.util.*var Y = -1var X = -1lateinit var miro: Array>const val WALL = 0fun main() { // (1) make miro and make discovered for bfs val yAndX = readln().split(" ") Y = yAndX[0]..

[Android] BottomSheetScaffold의 BottomSheet가 사용자 입력으로는 숨겨지지 않지만, 프로그래밍적으로는 숨겨질 수 있게 만들기

#1 문제 상황#1-1 사용자 입력으로 숨겨지지 않게 만들기val scaffoldState = rememberBottomSheetScaffoldState( bottomSheetState = rememberStandardBottomSheetState( skipHiddenState = true ))이러면 된다. 사실 skipHiddenState는 기본값이 true기에 그냥 val scaffoldState = rememberBottomSheetScaffoldState()만 써도 되긴 한다. 본 게시글의 코드는 기록의 의미가 강하므로, 그냥 명시적으로 밝혀 썼다. #1-2 문제점FilledTonalButton( onClick = { scope.launch { ..

[백준] 11659 (구간 합 구하기 4)

#1 알고리즘#1-1 동적 프로그래밍 동적 프로그래밍 (Dynamic Programming), 상향식(Bottom-up) 및 하향식(Top-down) 접근#1 알고리즘#1-1 정의동적 프로그래밍을 한 줄 요약하면 중복의 제거다. 정적(static)이라는 개념과 반대되는 개념으로서, 동적(dynamic)이라는 단어가 이름에 붙었다. 확실히 static이 붙을 만한 작업kenel.tistory.com상향식 동적 프로그래밍 문제다. #1-2 구간 합 도출 방법캐싱을 위해 모든 range 예를 들어, 1..300, 40..70, 998..999, ...들을 전부 구하는 것은 사실상 불가능하다. 무수한 경우의 수가 있기에 저장 공간과 계산 시간 모두 안드로메다로 날아가 버린다. 대신, 1..1, 1..2, 1....

[백준] 11726 (2×n 타일링)

#1 알고리즘#1-1 직관화타일로 생각하면 머리가 아프다. 어떤 수 n을 1과 2만 사용한 덧셈식으로 표현했을 때, 나올 수 있는 가짓수로 생각하면 한결 명확해진다. 가령, 위 타일 조합을 1 + 1 + 2 + 1로 생각하는 것이다. #1-2 피보나치?var n = -1val cache = Array(1001) { -1 }fun main() {    n = readln().toInt()        cache[1] = 1 // (1)    cache[2] = 2 // (1 + 1), (2)    cache[3] = 3 // (1 + 1 + 1), (1 + 2), (2 + 1)    cache[4] = 5 // (1 + 1 + 1 + 1), (1 + 1 + 2), (1 + 2 + 1), (2 + 1 + 1..

[백준] 1697 (숨바꼭질)

#1 알고리즘 그래프 - 너비 우선 탐색 (BFS, Breadth-First Search)#1 그래프의 탐색 너비 우선 탐색 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전.ko.wikipedia.org그래프의 각 정점을 한번씩 방문할 필요가 있다고 해보자. 그 방문의 방kenel.tistory.combfs 문제다. 왜 bfs일까? 이 문제에서, 어떤 '위치'에서 도출되는 '다음 위치'는 3종류가 존재한다. 그리고 그 '다다음 위치' 또한 그럴 것이다. 이런 식으로 어떤 단계(순서)가 존재하며 그 단계(순서)에 맞게 순회를 해야한다. bfs 또한 그래프의 일종인 트리를 예로 말하자면, 트리의 깊이(= 단계)를 하나하나 정복해나가며 bfs가 수행되지 않는가? 즉, 순회 원리가 서로 같다...

Pagination 인터페이스ㆍ구현ㆍ검증용 앱

#1 Pagination 클래스Pagination 클래스는 전체 게시글 갯수, 한 페이지에 표시할 게시글 갯수, 한 페이지 블럭에 표시할 페이지들의 갯수에 기반해 게시판의 네비게이션 역할을 하는 클래스다. 예전에 웹 프로그래밍에서 게시판을 만들 때 처음 만들었다. 그 이후로도 2 ~ 3번 정도 다시 Pagination 클래스를 재작성했던 기억이 있다. 얼마나 비효율적인가! 그래서 이참에 완벽하게 구현하고 기록해두려 한다. 앞으로 Pagination 클래스는 본 게시글의 코드를 재사용할 것이다. #2 기본 코드#2-1 인터페이스// by interfacer_han (https://kenel.tistory.com/327)/*(example) goToFirstPageBlockButton: (example) g..

Nutri Capture 프론트엔드 - NutrientBottomSheet 부분 구현

#1 개요 Nutri Capture 프론트엔드 - '피자' 아이콘 임시 적용#1 커스텀 아이콘 임시 적용#1-1 커스텀 아이콘 Nutri Capture 프론트엔드 - '피자' 아이콘 구현#1 개요#1-1 지금까지의 여정 Nutri Capture 프론트엔드 - 커스텀 BottomSheetScaffold 개발 유예#1 개요#1-1 개발 이kenel.tistory.com위 게시글에서 못다한 부분을 구현했다.  #2 코드 스니펫#2-1 NutritionBottomSheet.kt...@Composablefun NutrientBottomSheet( viewModel: NutrientViewModel = hiltViewModel()) { val inputtedDayMeal = viewModel.nutrie..

Nutri Capture 백엔드 - NutritionInfo 리팩토링

#1 문제점#1-1 리팩토링할 기존 코드package com.example.nutri_capture_new.dbimport androidx.room.ColumnInfodata class NutritionInfo( // 과식 정도값 @ColumnInfo(name = "overeating_excess") var overeatingExcess: Int = 0, // 정제당 섭취 정도값 @ColumnInfo(name = "refined_sugar_excess") var refinedSugarExcess: Int = 0, // 정제 곡물 섭취 정도값 @ColumnInfo(name = "refined_grain_excess") var refinedGrainExcess..