분류 전체보기

이번 프로젝트에서 Github Action이라는것을 알게되고, CI를 적용해보았다. CI CI(Continous Integration) 지속적인 통합 CI를 제대로 구축하면 코드의 새로운 변경사항을 레포지토리에 적용할때마다 테스트,ktlint등 검사를 할 수 있다. 우리팀과 같은 경우 코틀린 컨벤션을 지키는 Ktlint를 CI로 구축해서 특정 브랜치에 push나 PR을 날릴 경우 Github action으로 등록한 workflow에 따라 자동으러 검사를 한다. 우리는 Git flow 전략에 따라서 develop 브랜치에 PR을 날릴때마다 작성한 코드의 코틀린 컨벤션을 검사한다. 위 사진과 같이 error를 감지할 경우 어디서 컨벤션을 지키지 않았는지 알 수 있다. 팀 그라운드룰로 Kotlin Conven..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/92335# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 N에 대한 k진수를 구하고 소수 판별에 대한 최적화만 할 수 있다면 쉽게 풀 수 있는 문제이다. 1번 테케에서 틀렸던 사람들은 자료형을 바꾼다면 아마 통과할것이다. 기본적인 k진수 구하기 알고리즘은 k로 나눈 나머지를 저장해서 거꾸로 바꾼다면 아마 그것이 N에 대한 k진수일것이다. 문제에서 요구사항은 N으로 끊어서 그 수가 소수인지 아닌지만 판단하면 된다. 추가적으로 N에 0이 ..
문제 https://www.acmicpc.net/problem/20181 20181번: 꿈틀꿈틀 호석 애벌레 - 효율성 꿈틀꿈틀 호석 애벌레는 N 개의 먹이가 일렬로 나열된 나뭇가지를 오른쪽으로 기어가려고 한다. 시작하는 순간의 호석 애벌레가 0의 위치에 있고 i 번째 먹이는 오른쪽으로 i 초 기어가야 도달할 www.acmicpc.net 문제 풀이 문제를 읽어보니 누적합의 최댓값을 구하는 문제라고 생각을 했다. DP 문제인줄 알았지만, 탐색하는 과정에서 시간이 오래 걸려서 투 포인터 알고리즘을 사용하기로 했다. 투 포인터 알고리즘을 사용했기 때문에 start와 end를 움직이면서 탐색을 진행한다. 기존의 투 포인터 문제들은 누적합을 넘어선 순간 start를 증가시키고, 누적합을 넘지 못한다면 end를 증..
문제 https://www.acmicpc.net/problem/20366 20366번: 같이 눈사람 만들래? 높이가 (2, 5), (3, 5)로 구성된 눈사람 둘을 만드는 것이 최적의 경우 중 하나이다. |7-8| = 1 다른 경우로는 (2, 9), (5, 5)로 두 눈사람을 만드는 경우가 있다. |11-10| = 1 www.acmicpc.net 문제 풀이 4가지 경우의 수를 모두 구한다면 아마 시간 초과를 피할 수 없을 것이다. 해당 문제도 투 포인터 알고리즘을 사용해야 한다. 눈사람을 4개 골라야 하는데 투 포인터 알고리즘으로 어떻게 하냐~~ 할 수 있는데 세 용액 문제와 동일하게 탐색 숫자를 줄여주면 된다. 4개를 골라야 한다면 이미 2개를 고르고 나서 나머지 2개에 대해서 투 포인터 알고리즘을 사..
문제 https://www.acmicpc.net/problem/2473 2473번: 세 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 www.acmicpc.net 문제 풀이 투 포인터 알고리즘의 대표적인 예시 문제라고 할 수 있습니다. https://jja2han.tistory.com/284 투 포인터 알고리즘(Two Pointer) 알고리즘 스터디를 하다가 새로운 알고리즘을 발견해서 호다닥 공부해서 정리하는 "아주 주관적인" 글입니다. 🔎투 포인터 알고리즘을 쓰는 이유 완전 탐색을 할 경우 시간초과를 피하기 위해 jja2han...
문제 https://school.programmers.co.kr/learn/courses/30/lessons/150367# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 문제를 읽어도 전혀 이해가 가지 않았다. 주어진 이진트리가 뭐지? 무슨 규칙이 있는 건가? 싶어서 무작정 문제에 대한 예시를 그려보았다. 우선 문제에 대한 예시로 나온 숫자들을 2진수로 바꾸면 다음과 같다. 그리고 문제에서 포화 이진트리로 생성해야 했기에, 0을 채워줬다. 포화 이진트리는 깊이가 n일때 노드의 개수는 2ⁿ -1으로 맞춰줘야 한다. 따라서 42와 63 모두 깊이가..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 전형적인 BFS 문제이다. BFS 문제에서의 난이도는 방문배열을 3차원배열로 해야 하는지, 2차원 배열로 해야 하는지에 따라 나뉜다고 생각한다. 해당 문제는 좌표로 들어왔던 도로의 방향을 기억해줘야 한다. 그래야 코너를 만들 때 계산을 해 줄 수 있기 때문이다. 그리고 도착지점에 도착할 경우 그때 경주로 건설에 사용한 비용의 최소값을 반환해야 한다. 따라서 나는 우선순위큐를 이용해..
· Skils/Kotlin
완전탐색, 백트래킹, DFS에서 조합과 순열을 많이 사용한다. Kotlin은 정말 잘 만든 언어이지만, 조합은 파이썬처럼 라이브러리로 구현되어 있지 않아서 우리가 한 땀 한 땀 구현을 해야 한다. 매번 문제를 풀 때 헷갈리기도 하고, 정리하면 좋을 거 같아서 포스팅하게 되었다. 순열 (Permutation) 정의는 다음과 같다. 서로 다른 n개의 원소에서 r개를 중복 없이 순서에 상관있게 선택하는 혹은 나열하는 것 중복이 없고, 순서가 있다는 것이 순열의 특징이다. 순열은 재귀함수를 통해서 구현할 수 있다. cnt는 현재 내가 뽑은 원소의 수, depth는 내가 뽑아야 할 원소의 수이다. 즉 원소의 개수가 N이고, 내가 중복 없이 순서를 지키면서 R개를 뽑으려고 할 때는 nPr이고, makePermuta..
이번글은 Jetpack Compose에 관한 글입니다. 현재 안드로이드 기술에서는 UI를 구현하기 위한 기술로 Xml과 Jetpack Compose 두 가지가 있습니다. Xml은 전통적인 방식으로 예전부터 사용했던 방식이고, Jetpack Compose는 떠오르는 신기술입니다. 그렇다면 왜 Xml이 아닌 새로운 방식의 기술이 등장했고, 도입하려고 하는 것인지, 그리고 제가 느낀 점에 대해서 적었습니다. Jetpack Compose란? Jetpack Compose는 네이티브 UI를 빌드하기 위한 Android의 최신 툴킷 공식문서에서 Compose를 채택해야 하는 이유는 다음과 같이 정의합니다. 간단한 코드 이전까지의 xml 방식에서는 Kotlin과 Xml을 번갈아가면서 작업을 했습니다. 하지만 Compo..