전체 글 345

[프로그래머스] 42860 (조이스틱)

#1 오답#1-1 오만한 풀이→ 방향으로만 커서를 이동하며 누적된 조작 횟수← 방향으로만 커서를 이동하며 누적된 조작 횟수이 둘을 비교하여 더 작은 값을 반환하면 되겠다고 생각했다. 문제를 더 깊이 들여다보지 않고 쉽게 가려던 오만함이 부른 결과였다. #1-2 탐욕법 (그리디)이번엔 문제의 유형을 판단해 보려고 했다. 그리디 알고리즘 아닐까?현재 커서의 위치로부터 가장 가까운, 'A'가 아닌 위치까지 이동한다.해당 위치까지 간 후에, 문자를 변경한다.반복한다.하지만, 이 문제는 그리디 알고리즘이 아니었다. 그때그때 제일 나은 선택을 하는 것이 최적해로 이어지지 않는다는 말이다. 반례는 아래와 같다. ABBBBBBBBAAAAAAAAAAAAAAAABAAA맨 끝에 있는 B에 들렸다가 유턴하여 나머지 B들을 방..

그래프 - BFS vs DFS (너비 우선 탐색 vs 깊이 우선 탐색)

#1 차이의 핵심: 대기열BFS와 DFS, 두 탐색 기법의 차이를 결정짓는 핵심은 '대기열' 관리다. 여기서 말하는 대기열을 영어로는 Frontier라고도 한다. 대기열이란 무엇인가? "다음에 갈 수 있는 곳들의 목록"이다. 이 대기열을 관리하는 방식의 차이가 곧 BFS 및 DFS 간의 차이다. BFSDFS대표 자료 구조QueueStack자료 구조의 성질FIFO= 가장 오래 전 들어온 것을 꺼냄LIFO= 가장 최근 들어온 것을 꺼냄성질의 의미(Meaning)발견 순서를 보존발견 순서를 반전의미(Meaning)에서 파생되는 결과 1부모 쪽 처리가 먼저 확정(끝남)자식 쪽 처리가 먼저 확정(끝남)의미(Meaning)에서 파생되는 결과 2대기열에 (대체로) 같은 층의 형제들이 담김대기열에 (대체로) 조상들이 ..

Swemo - Iteration 8: Label과 Text 분리

#1 개발 목표 (Iteration Goal)#1-1 이상(Ideal)과 징검다리이상(Ideal)원래는 투박한 UI 다듬기부터 할랬다. 하지만, 사용자가 Label 부분과 상호작용하는 방식을 어떻게 규정하는지에 따라 UI가 변할 수 있다. 즉 UI는 우선순위가 아니다. Label은 Swemo의 핵심 기능이므로 앞으로도 다듬어 나갈 것이다. 지금은 최선이라고 생각되는 초안을 짠다. Iteration 8: Label과 Text 분리Swemo의 핵심인 Label을 사용자가 조작할 수 있게 만들어본다. 하지만, 스케치만 하는 건 탁상공론이다. 여러가지 후보 UI를 하나씩 만들어본다. #1-2 개발 범위이번 개발 범위 (In Scope)UI 구현을 위한 테스트 전용 앱 (그릇 역할)멀티 모듈 앱모듈 하나가 UI ..

[프로그래머스] 43164 (여행경로)

#1 알고리즘 그래프 - 깊이 우선 탐색 (DFS, Depth-First Search), 백트래킹 (Backtracking)#1 그래프의 탐색 깊이 우선 탐색 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 깊이 우선 탐색 깊이 우선 탐색의 애니메이션 예시 깊이 우선 탐색( - 優先探索, 영어: depth-fikenel.tistory.com백트래킹이라는 개념을 다시 익혔다. 예전에 개념 정리를 해두었는데, 까먹어버려서(...) 유형 파악이 늦어버렸다. 시험장에서였다면 제 시간 내로 못 풀었을 것이다. #2 코드 - 코틀린class Solution { var ticketCount: Int = -1 lateinit var indexToName: Array lateinit ..

[프로그래머스] 87694 (아이템 줍기)

#1 오답 - 건강한(?) 실패#1-1 코드class Solution { int[][] visited = new int[51][51]; public int solution(int[][] rectangle, int characterX, int characterY, int itemX, int itemY) { int[][] graph = getGraph(rectangle); // (BFS보다는) 코드를 좀 더 깔끔히 쓸 수 있는 DFS 선택 dfs(graph, 1, characterY, characterX); return visited[itemY][itemX]; } void dfs(int[][] graph, int length, int y..

[Android] Navigation - Navigation 2 → 3

본 게시글에서 다룬 앱의 전체 소스 코드는 #5에 있습니다. #1 개요기존 Android Navigation 라이브러리는 "Jetpack Navigation 2"였다. 다음 세대인 "Jetpack Navigation 3"이 출시되었는데, 2와 3 각각의 라이브러리를 사용하여 샘플 앱을 하나씩 만들어본다. 그리고 Navigation 3의 구조로부터 (2 대비) 어떤 긍정적 효과를 꾀했는지 살펴본다. 샘플 앱은 최소한의 코드로 구성해 하나의 파일(MainActivity.kt)에 때려 박았다. 공부 면에선 파일을 나누는 것보다 오히려 더 직관적이라는 판단에서다. #2 Jetpack Navigation 2 탐색 | App architecture | Android DevelopersAndroid Jetpack의 ..