전체 글 347

Swemo - Iteration 9: Bulleted List 구현 2

#1 개발 목표 (Iteration Goal)저번 Iteration에 이어 다양한 기능을 지닌 Bulleted List를 구현하려고 했으나, 진행 도중 전부 폐기 후 급하게 마무리했다. 잠재적 에러를 안고 가기, 혹은 아주 많은 시간을 들여 어떻게든 완료하기라는 2개의 선택지 어느 쪽도 고르고 싶지 않았다. #2 변경 내역#2-1 Iteration 9-1: Label을 감싸는 Pill UILabel를 Text와 구별 짓기 위해 Pill(알약) 모양으로 감싼다. Pill이 만들어지는 기제. 구현 방법에 대한 고민 1가장 먼저 든 생각은 Label 부분에 TextStyle을 입히는 방식이었다. 참고로 BasicTextField의 인자 중엔 textStyle이 있는데 이건 전체 텍스트에 일괄 적용되므로 이용할..

[Kotlin] invoke() 연산자

#1 invoke()#1-1 예시 코드class Greeter { operator fun invoke() { println("Hello") }}val greeter = Greeter()greeter()코드를 보고 혼란스러웠다. 이게 무슨 짓이지? 갑자기 객체에 괄호를 왜 붙이지? 생성자 같은 건가? 하지만 그럴 리가 없다. 생성자는 클래스에 괄호를 붙이는 거고, 이 경우는 객체에 괄호를 붙이는 거니까. 애초에 '이미 생성'된 존재인 객체를 또 생성한다? 말도 안 된다. #1-2 What정체사실 greeter()는 greeter.invoke()와 같은 코드다. 즉, invoke()라는 함수의 축약 형태가 ()인 것이다. 이는 invoke가 연산자(operater)이기에 가능한 특권적..

[프로그래머스] 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: Bulleted List 구현 1

#1 개발 목표 (Iteration Goal)#1-1 이상(Ideal)과 징검다리이상(Ideal)원래는 투박한 UI 다듬기부터 할랬다. 하지만, 사용자가 Label 부분과 상호작용하는 방식을 어떻게 규정하는지에 따라 UI가 변할 수 있다. 즉 UI는 우선순위가 아니다. 그리고 Label 및 Text는, Bulleted List의 형태로 구현할 것이다. 따라서, 먼저 앱 내에서 어떻게 Bulleted List를 구현할 것인지 정해야 한다. Iteration 8: Bullted List 구현 1샘플 앱에서 다양한 시도를 해본다. 그리고 가장 적합한 구현 방식을 선정해 Swemo에 이식한다. 구현이 길어져서 다음 Iteration의 목표도 Bulleted List 구현으로 뒀다. 차이점은, 이번은 Bullet..

[프로그래머스] 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..