전체 글 10

Android Jetpack Compose 시작하기

Jetpack Compose는 네이티브 Android UI 빌드하기 위한 최신 도구 키트입니다. Jetpack Compose는 적은 수의 코드, 강력한 도구 및 직관적인 Kotlin API로 Android에서의 UI 개발을 간소화하고 가속화합니다. 재미있는 라이브러리가 나왔습니다. 이미 19년에 Google I/O에서 발표했지만 이번에 beta 버전으로 올라오면서 관심이 가게 된 라이브러리 입니다. 구글은 Jetpack을 공개하면서 앱 개발을 쉽게 도와줄 수 있는 많은 도구들을 공개했지만 UI 만큼은 개선점이 많이 없었습니다. Jetpack Compose가 바로 그 해결책입니다. 기존 안드로이드 UI는 XML에서 레이아웃과 뷰를 만들어 배치하고 id를 바인딩하여 이벤트를 처리하는 방식이었습니다.. 신기하..

2. 계수 정렬(Counting Sort)
알고리즘/정렬 2020.10.28

합병 정렬, 퀵 정렬, 힙 정렬은 빠른 정렬 알고리즘에 속하지만 이 보다 더 빠른 정렬 알고리즘이 있다고 해서 퀵 정렬과 힙 정렬을 기술하기 전에 먼저 가져와봤다. 계수 정렬(Counting Sort)의 시간 복잡도는 다음과 같다. 시간복잡도 O(n + k) O(n + k)일 때 상수 k는 무시해도 되지만 계수 정렬에서 k는 나름 시간 복잡도에서 중요한 요소가 될 수 있다. k는 정렬한 수 집합 중 가장 큰 값을 의미하는데 계수 정렬이 어떤 방식으로 이루어지는지 확인해보면 k가 왜 존재하는지 알 수 있다. 정렬 방법 계수 정렬은 합병 정렬이나 퀵 정렬과는 다르게 숫자를 비교하지 않고 모든 숫자의 개수를 세는 방식으로, 숫자를 센 다음 정렬하기 때문에 '계수 정렬'이라고 부르는 것이다. 계수 정렬은 정수일..

[2447] 별 찍기 - 10 - Java

https://www.acmicpc.net/problem/2447 문제 해석 처음 문제를 봤을 때 이전에 본 적 없던 별 찍기 방식이었다. 입력값 N은 항상 3의 거듭제곱이고 N × N 정사각형에 특정한 패턴을 찍는 문제이다. 특정한 패턴은 크기 3인 정사각형 가운데가 비어있게 별을 찍는 형태로 위와 같은 패턴을 띄고 있다. N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N / 3)×(N / 3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. N이 27인 경우 결과는 다음과 같다. 패턴 문제이기 때문에 27 크기에서 패턴을 찾을 수 있다. N = 3일 때는 가운데 공백을 기준으로 *이 둘러싸여있는 형태라면 N = 27일 때는 N = 9 패턴이 둘러 싸고 있다는 것을 알 수 있다..

[10870] 피보나치 수 5 - Java

https://www.acmicpc.net/problem/10870 문제 해설 재귀 함수 예제에서 팩토리얼과 더불어 많이 나오는 문제이다. 풀이 [8] 캐시 배열 선언. 0은 사용하지 않으므로 1부터 n번까지 쓸 수 있게 n + 1개의 배열 크기로 초기화 [10] n에 0이 입력되면 0 출력 [17 - 29] 피보나치 메서드 [18] n이 1이나 2일 경우 1 반환 [22] 캐시 배열 n번 인덱스의 값이 0이 아니면 n번 인덱스의 값을 출력함 [26] 피보나치 메서드를 호출하고 캐시 배열에 저장 [28] 캐시 배열 n번 인덱스의 값 반환 Memoization 10872번 팩토리얼과 동작 방식이 같다. 그러나 여기서는 조금 다른 방식을 사용했는데 Memoization을 사용했다. 팩토리얼이나 피보나치에서 ..

[10872] 팩토리얼 - Java

https://www.acmicpc.net/problem/10872 문제 해설 재귀 함수 예제의 가장 기본 문제라고 볼 수 있다. 1차 풀이 결과: 틀렸습니다! 분명 올바르게 작성한 것 같은데 틀렸다고 한다. 0! = 1이라는 사실을 간과한 상태로 코딩했다. 최종 풀이 [8] n이 0이면 바로 1을 출력한다. [15 - 20] 팩토리얼 함수 [16] n이 1일 때 1을 리턴한다. [19] 팩토리얼 함수를 다시 호출하는데 이 때 n - 1을 인자로 넘겨준다. 5!을 구한다고 할 때 5! = 5 * 4 * 3 * 2 * 1로 나타낼 수 있다. 여기서 4 * 3 * 2 * 1 = 4!이므로 5! = 5 * 4!로 나타낼 수 있다. 4! = 4 * 3!이 성립하며 3!, 2!, 1! 모두 마찬가지다. 따라서 n..

코딩 테스트 알아야 할 알고리즘 목록

재귀 정렬 그리디 DFS/BFS 이진 탐색 다이나믹 프로그래밍 최단 경로 그래프 브루트 포스 백트래킹 스택 큐 투 포인터 트리 최소 신장 트리 유니온 파인드

[2941] 크로아티아 알파벳 - Java

https://www.acmicpc.net/problem/2941 문제 해설 문제에 제시된 크로아티아 알파벳이 포함된 문자열이 몇 개의 알파벳으로 구성되어있는지 출력하는 문제이다. 크로아티아 알파벳은 다음과 같이 변경한다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. dž는 하나의 알파벳으로 쓰이기 때문에 d와 ž를 분리시키지 않는다. 풀이 문자열의 앞 부분부터 하나씩 훑으며 변환하는 방법이 있겠지만 간단하게 정규표현식을 이용했다. (c=|c-|dz=|d-|lj|nj|s=|z=|[a-z]) 부분 처럼 크로아이티아 알파벳과 마지막에 영어 알파..

[11654] 아스키 코드 - Java

문제 해설 알파벳 소문자, 대문자, 숫자 0-9 중 하나를 입력하고 입력받은 글자의 아스키 코드값을 출력하는 프로그램을 작성하는 문제이다. 풀이 int로 받아서 출력하면 된다.