본문 바로가기

전체 글279

[Kotlin, S4] 백준 20363번 당근 키우기 당근 키우기(20363번)Silver 4#수학 #그리디 알고리즘 문제 링크https://www.acmicpc.net/problem/20363 문제 내용 문제 접근햇빛과 수분을 줄 수 있을 때, 한 항목에 10을 주면 다른 항목이 1이 감소할 때 x, y를 정확히 맞추는 합의 최솟값을 구한다. 예제 2를 기준으로 설명하자면,온기(x)는 123456만큼, 수분(y)은 12345만큼 필요하게 된다.그러면 최소 123456 + 12345 만큼은 햇빛, 물을 주는 횟수가 필요해지게 된다. 123456 + 12345만으로는 x, y를 모두 채울 수가 없다.햇빛을 먼저 채운다고 가정하면 1. sun = 123456, water = 0 2. sun = 122222, water = 12345의 상태가 되게 된다. sun.. 2025. 3. 16.
[Android, Kotlin] 새로워진 Navigation Compose의 safe args 적용하기 서론이번에 compose 프로젝트를 진행하면서 화면 이동 시 인자를 전달하는 safe args를 다시 사용하게 되었는데, safe args가 이번 compose 최신 업데이트로 더 편리하게 구현할 수 있도록 변경된 것 같아서 이번 기회에 어떻게 구현하는지 정리해 보려 한다. Navigation 2.8.0의 safe args 변경 사항이번에 Navigation의 버전이 2.8.0-alpha08 버전으로 업그레이드되면서 kotlin의 Serializable을 통해 인자를 넘길 수 있게 변경되었다. Serializable을 통해 data class로 화면을 정의하고 data class의 필드로 값을 전달할 수 있다.그러면 바로 어떻게 구현하는지 알아보자. Serializable, Navigation 추가lib.. 2025. 1. 23.
[Kotlin, S1] 백준 2468번 안전 영역 안전 영역(2468번)Silver 1#그래프 이론 #브루트포스 알고리즘 #그래프 탐색 #너비 우선 탐색 #깊이 우선 탐색 문제 내용 문제 접근n * n의 영역에서 내리는 비의 양에 따라서 잠기는 영역이 생기게 된다.영역이 3일 때, 비의 양이 3 이상이면 모든 영역 3이 잠기게 된다. 영역의 개수는 상하좌우에 붙어있는 모든 안전 영역들은 하나로 간주한다.대각선의 안전 영역은 모두 별개의 안전 영역이 된다. 내리는 비의 양에 따라 잠기는 영역의 수가 달라지게 될 것이다.물에 잠기지 않은 영역의 수의 최대 개수를 구한다. 비의 양은 영역에서 가장 작은 값에서부터 가장 큰 값까지 정의하고 탐색해 보면 될 거라고 생각하기 쉽다.하지만 영역에서 가장 큰 값으로 구해봤자 모든 영역이 잠기게 되기 때문에 굳이 구할 .. 2025. 1. 19.
[Kotlin, G5] 백준 11000번 강의실 배정 강의실 배정(11000번)Gold 5#자료 구조 #그리디 알고리즘 #정렬 #우선순위 큐https://www.acmicpc.net/problem/11000 문제 내용  문제 접근강의실을 최대한 적게 사용해 n개의 수업을 모두 진행해야 한다.강의의 시작 시간과 종료 시간을 참고해 모든 강의를 진행하는 데 필요한 최소 강의실의 개수를 구해야 한다. 각각의 강의들 중 강의 시작 시간이 강의 종료 시간보다 작거나 같을 때는 한 강의실에서 같이 들을 수 있다.예를 들어 시작 시간이 1이고 종료 시간이 3인 강의와 시작 시간이 3이고 종료 시간이 5인 강의는 한 강의실에서 같이 들을 수 있다.  강의들 중 제일 먼저 시작하는 강의부터 시작해 한 강의실에서 쓸 수 있는 강의들을 모두 제거하면서 문제를 해결하면 된다.예.. 2025. 1. 18.
[Kotlin, S2] 백준 14247번 나무 자르기 나무 자르기(14247번)Silver 2#그리디 알고리즘 #정렬 문제 내용  문제 접근n일 동안 나무를 잘라서 얻을 수 있는 나무의 최대 양을 구한다.첫날의 나무는 n개의 나무가 각각 h의 높이를 이루고 있고 날이 지날 때마다 hⁱ 에 해당하는 aⁱ 만큼 나무가 자라게 된다. 문제를 보면 날마다 자라는 나무의 높이가 다르기 때문에 매일 제일 높이가 높은 나무를 고르는 것으로 문제를 해결할 수 있다고 생각하기 쉽다.하지만 그 방법은 최적해가 아니다. 우리는 제일 덜 자라는 나무부터 시작해서 제일 잘 자라는 나무 순서대로 나무를 골라야 한다.나무가 잘 자랄수록 나중 갈수록 나무의 높이가 매우 커지기 때문에 매일 제일 높이가 높은 나무를 고르는 것보다 더 많이 나무를 고를 수 있데 된다. 이제 이 아이디어를 .. 2025. 1. 14.
[Kotlin, S1] 백준 2205번 저울 추 만들기 저울 추 만들기(2205번)Silver 1#수학 #그리디 알고리즘https://www.acmicpc.net/problem/2205 문제 내용  문제 접근1부터 n까지의 무게를 가진 납과 주석을 합쳐서 2의 제곱수의 무게를 가지는 저울추를 만들어야 한다.각 무게를 가지는 덩어리는 중복해서 사용이 불가능하다. n이 1부터 5까지 이루어져 있을 때, n이 5일 때는 3을 대입해서 8을 만들 수 있다. 4일 때는 주석의 무게를 추가해서 (4, 4) 조합으로 8을 만들 수 있고 주석이 3일 때는 (3, 5)의 조합으로 저울추를 만들 수 있다.정의된 무게를 만들기 위해 주석이 커지면 납이 작아지고, 납이 커지면 주석이 작아지는 특징을 이용해 중복을 허용하지 않고 주석의 무게를 구성할 수 있게 된다. 저울추의 무게는.. 2025. 1. 7.
[Kotlin, S2] 백준 1780번 종이의 개수 종이의 개수(1780번)Silver 2#분할 정복 #재귀https://www.acmicpc.net/problem/1780 문제 내용  문제 접근종이가 -1 또는 0 또는 1로 모두 채워지지 않았을 때, 정확히 9등분을 해 다시 종이가 -1 또는 0 또는 1인지 확인해서-1, 0, 1로 채워진 종이의 개수를 세서 출력하면 된다. 시작 좌표와 확인할 size를 정한 다음, 시작 좌표에서 size만큼의 범위를 확인해 숫자의 개수를 세주는 방식의 재귀 호출을 통해 해결할 수 있다.  문제 해결 코드더보기import java.io.BufferedReaderimport java.io.InputStreamReaderprivate var paper = arrayOf(arrayOf())private var cntMinu.. 2024. 12. 18.
[Kotlin, S3] 백준 32186번 역시 내 이세계 수열은 잘못됐다 역시 내 이세계 수열은 잘못됐다(32186번)Silver 3#수학 #그리디 알고리즘https://www.acmicpc.net/problem/32186 문제 내용  문제 접근각 위치에 맞는 index의 값 2개를 +k 연산과 +1 연산을 이용해 같은 값으로 만들어야 하는 최소 연산 횟수를 출력한다. 값 2개 중 작은 값을 큰 값에 딱 맞게 만드는 방법과작은 값에 +k 연산을 반복해 큰 값보다 커지도록 만들고 큰 값에 +1 연산을 해서 값을 맞추는 방법이 있다. 예를 들어 k가 7이고 5와 28이 매칭되는 값일 때5를 28로 만들기 위해서는 5에 7을 3번 더하고 1을 2번 더하면 28이 된다(연산 횟수 5번).그리고 5에 7을 4번 더하면 33이 되는데, 28에 1을 5번 더하면 두 값이 모두 33이 된다.. 2024. 12. 18.
[Kotlin, B1] 백준 10275번 골드 러시 골드 러시(10275번)Bronze 1#수학 #구현https://www.acmicpc.net/problem/10275 문제 내용  문제 접근a, b 중에 하나를 2의 제곱수만을 이용해 만들어야 한다.예를 들어 24는 16 + 8로 만들 수 있는데, 이때 차수가 가장 적은 수를 만들기 위해 2의 n제곱한 수에서 몇 번을 반으로 잘라야 만들 수 있는지 구하면 된다.a, b에 정확히 요구된 수만큼만 들어가야 한다는 것과 a + b가 2의 n제곱과 같기 때문에 a와 b 중 하나만 구해도 나머지를 구할 수 있게 되기 때문에 이를 생각하게 되면 하나만 구해도 된다는 것을 알게 될 것이다.  문제 해결 코드더보기import java.io.BufferedReaderimport java.io.InputStreamRead.. 2024. 12. 14.
[Kotlin, S2] 백준 26007번 Codepowers Codepowers(26007번)Silver 2# 누적 합 문제 내용  문제 접근각 쿼리는 시작 라운드(포함), 종료 라운드(미포함)의 사이에 진행된 라운드마다의 현재 레이팅을 구해서 k보다 낮은 레이팅의 개수를 구해서 출력하면 된다. 문제 내용은 단순하지만 왜 silver 2씩이나 받았는지 생각해봐야 한다.  문제 해결 코드더보기import java.io.BufferedReaderimport java.io.InputStreamReaderimport java.util.StringTokenizerfun main() { val bf = BufferedReader(InputStreamReader(System.`in`)) // n: round, x: 초기 레이팅, m: 쿼리의 개수, k: 낮은 레이팅.. 2024. 12. 3.
[Kotlin, S4] 백준 2090번 조화평균 조화평균(2090번)Silver 4#수학 #구현 #정수론 #유클리드 호제법 문제 내용  문제 접근입력받는 수들을 모두 역수로 바꾼 값들의 합을 분수 형태로 변환 후 그 값의 역수를 출력하는 문제이다.1, 2, 4가 들어왔으면 1 + 1/2 + 1/4 = 7/4를 역수로 출력해서 정답이 4/7이 되는 방식이다. 입력값들의 역수를 더하려면 통분이 필요한데, 통분은 입력값들의 최소공배수를 이용해 통분을 진행하면 된다.주의해야 하는 점은 출력을 가장 적은 수의 문자를 사용하는 답을 출력하라고 돼 있는데, 이를 쉽게 풀면 약분해서 출력하라는 뜻이기 때문에 약분까지 진행해서 출력해야 한다.  문제 해결 코드더보기import java.io.BufferedReaderimport java.io.InputStreamRea.. 2024. 11. 25.
[Kotlin, S4] 백준 16471번 작은 수 내기 작은 수 내기(16471번)Silver 4#그리디 알고리즘 #정렬https://www.acmicpc.net/problem/16471 문제 내용 문제 접근사장님이 뽑은 카드에서 이기기 위해 낼 수 있는 가장 큰 카드를 계속 냈을 때, 더 이상 이기는 수가 없을 경우, 이긴 횟수에 2를 곱해서 카드의 개수보다 크다면 YES를 출력하고, 아니면 NO를 출력하면 된다. 입력 예제를 예로 들면,2 1 3 5 61 1 3 2 5 아래가 사장님의 카드고, 위가 주언의 카드일 때, 사장님이 카드를 큰 순서대로 뽑게 되면 5, 3, 2, 1, 1의 순서대로 뽑게 된다.주언이 카드를 뽑아 사장님을 이기려면,사장님이 5를 뽑았을 때, 5보다 작은 카드인 1, 2, 3 중에서 제일 큰 3을 고르고,사장님이 3을 뽑으면 주언이.. 2024. 11. 17.
[Kotlin, S5] 백준 11116번 교통량 교통량(11116번)Silver 5#구현 #브루트포스 알고리즘https://www.acmicpc.net/problem/11116 문제 내용  문제 접근다리의 왼쪽에서 오는 차들(들어오는 차)의 시간과 오른쪽으로 나가는 차들의 시간이 주어졌을 때, 문제에 언급된 규칙을 이용해 다리를 지난 차들이 몇 대인지 구하면 된다. 왼쪽에서 오는 차의 시간이 t, t + 500이고, 오른쪽으로 나간 시간이 t + 1000, t + 1500이 있는 경우가 다리를 지난 차가 된다.  문제 해결 코드더보기import java.io.BufferedReaderimport java.io.InputStreamReaderfun main() { val bf = BufferedReader(InputStreamReader(Syste.. 2024. 11. 15.
[Android] thread와 함께 알아보는 coroutine, flow에 대한 고찰 이번 고찰의 주제는 coroutine이다.kotlin을 사용했거나, 사용 중인 개발자들에게는 항상 따라다니는 비동기 처리 개념이다.이번 포스팅으로 확실하게 궁금했던 것들을 공부하면서 짚고 넘어갈 예정이다. coroutine이란?coroutine은 thread 안에서 실행되는 일시 중단 가능한 작업 단위이다.하나의 thread에서 여러 coroutine이 서로 thread를 양보해 가며 실행될 수 있다. 그러면 어째서 coroutine이 생겨나게 된 걸까? coroutine은 왜 사용하게 되었을까?thread 기반의 다중 thread 작업의 한계coroutine 이전의 동시성 작업은 모두 thread 기반으로 이루어졌다.thread 기반으로 작업을 수행하게 되면 thread 1의 작업이 진행되는 중에 다른.. 2024. 11. 12.
[Android] liveData, stateFlow와 함께 보는 MVVM에 대한 고찰 이번 포스팅에서는 저번 포스팅에서 언급했다시피, clean architecture와 함께 실무에서 반필수적으로 사용되는 디자인 패턴인 mvvm에 대해 공부해서 적어보고자 한다.마찬가지로 공부하면서 참고한 포스팅도 같이 링크로 남겨 놓겠다. MVVM은 무엇일까?MVVM에 관해서는 찾아보면 자료가 많이 나오기 때문에 간단하게 정의해 보면,MVC와 MVP에서 view와 엮이는 의존성을 해결하기 위해 view model을 도입한 디자인 패턴.MVVM은 model, view, view model의 약자다. 여기서 view model과 view는 1 : n의 관계를 가질 수 있다는 특징을 지닌다. MVVM을 왜 쓰는 걸까?mvvm 디자인 패턴은 다음과 같은 장점을 가진다.의존성 최소화view는 view model을.. 2024. 11. 11.
[Android] hilt와 함께 보는 clean architecture에 대한 고찰 이번 포스팅에서는 Android 개발에서 왜 clean architecture를 사용하는지, 그리고 내가 clean architecture에 관해서 궁금했던 것들을 공부해서 적어 보고자 한다. 내가 공부하면서 참고한 포스팅도 함께 남길 테니 더한 내용이 궁금하면 확인해 보는 것도 좋겠다. clean architecture의 정의정의는 다른 포스팅에도 자주 언급되기 때문에 간단하게 설명하겠다.clean architecture는 소프트웨어 시스템의 구조를 설계할 때 지켜야 할 원칙과 방법을 정의한 개념.복잡한 소프트웨어 시스템을 보다 관리 가능하고 유지 보수 가능한 형태로 구축하기 위한 지침을 제공한다. 간단하게 요약하자면, 규모가 큰 소프트웨어를 설계할 때 지켜야 하는 구조 같은 거라고 이해하면 될 것 같.. 2024. 11. 8.
[Kotlin, S2] 백준 2232번 지뢰 지뢰(2232번)Silver 2#그리디 알고리즘 #정렬https://www.acmicpc.net/problem/2232 문제 내용  문제 접근지뢰를 모두 터트리는 최소 개수를 구해야 한다.직접 터트리는 지뢰의 개수를 최소로 하려면 연쇄적으로 터지는 지뢰의 개수가 많은 곳을 위주로 터트리면 된다. 직접 터트리는 지뢰의 위치에서 왼쪽 방향은 오름차순으로 수가 정렬되어 있어야 하고, 오른쪽 방향은 내림차순으로 정렬되어 있어야 한다.예를 들어 다음과 같이 지뢰가 있을 때,1 2 5 4 3 3 6 6 2 3, 7, 8번의 지뢰를 직접 터트리면 모든 지뢰를 제거할 수 있다.  지뢰가 연쇄적으로 터지려면 왼쪽은 오름차순으로 중복 없이 정렬되어 있어야 하고, 오른쪽은 내림차순으로 중복 없이 정렬되어 있어야 한다. 오름.. 2024. 10. 21.
[Kotlin, B1] 백준 31432번 소수가 아닌 수 3 소수가 아닌 수 3(31432번)Bronze 1#수학 #애드 혹 #정수론 문제 내용  문제 접근n개의 숫자를 사용해서 소수가 아닌 수가 있으면 yes를 출력하고 소수가 아닌 수 하나를 아무거나 출력하고, 소수가 아닌 수가 없을 때는 no를 출력하는 문제이다.각 숫자는 중복해서 사용할 수 있다. 약간의 수학적 고민이 필요한 문제이다. 같은 숫자를 중복해서 쓸 수 있다는 경우 때문에 no가 나오는 경우는 하나도 없다.n개의 숫자가 2, 3, 5, 7인 경우에는 n의 숫자들이 모두 소수이지만, 같은 숫자를 여러 번 쓸 수 있으면 22, 33, 55, 77처럼 소수가 아닌 수를 언제든지 만들 수 있다는 뜻이 되기 때문에 n에 어떤 수가 나와도 no가 나오는 경우가 없어지는 것이다. 그러면 정답을 같은 수를 사용.. 2024. 10. 17.
[Kotlin, P4] 백준 10000번 원 영역 원 영역(10000번)Platinum 4#자료 구조 #정렬 #기하학 #스택https://www.acmicpc.net/problem/10000 문제 내용 문제 접근우선 문제 이해부터 해보자.간단하다.원을 x축에 구성하고 난 후, 영역을 세면 된다. 영역의 개수는 다음과 같이 세면 된다. 원의 영역과 원끼리 접하면서 나뉜 영역도 생각해야 하고, 원 바깥의 영역도 처리해야 한다.원끼리 접하면서 나뉘게 되는 영역을 나누는 방법을 생각해야 하기 때문에 어렵다. 초기 구현 아이디어를 떠올리기 위해 아래의 블로그를 참고해서 구현했다.https://wonyoung2257.tistory.com/79 [백준 python] 10000번 원 영역[백준 python] 10000번 원 영역 레벨: 플레티넘5 언어: 파이썬 htt.. 2024. 10. 14.
2024년 Android 4기 내일배움캠프 솔직후기 10월 7일에 약 5달 동안 진행했던 내일배움캠프 Android 4기 세션이 마무리되기 때문에 이번에 솔직한 후기를 남겨 보도록 하겠다. 캠프 이전의 삶내일배움캠프를 알기 전에는 퇴사 후 일자리를 알아보는 중에 부트캠프 관련 공고를 보고 관심을 가지게 되어 부트캠프를 알게 되어 관련 자료를 찾아보기 시작했다. 왜 내일배움캠프인가?다른 부트캠프들이 많은데 내일배움캠프를 선택한 이유는 수료 이후에도 취업을 지원해 준다는 점이 제일 마음에 들었던 점이었고 그다음이 5달 이내의 짧은 기간으로 수료를 할 수 있다는 점도 있었던 것 같다. 내일배움캠프의 장점내일배움캠프를 하면서 다음과 같은 장점이 있었던 것 같다.100% 온라인제일 좋은 장점. 온라인이라서 강의만 듣는 게 아닌, 메타버스 zep에서 실제로 캠과 마.. 2024. 10. 4.
[Kotlin, G5] 백준 1711번 직각삼각형 직각삼각형(1711번)Gold 5#브루트포스 알고리즘 #기하학 #피타고라스 정리 문제 내용  문제 접근각 주어지는 점에서 무작위로 중복되지 않게 3개를 골라 만들 수 있는 직각삼각형의 개수를 구해야 한다.점의 개수가 1500개까지 있고, 시간제한이 5초이다.결정적으로 브루트포스 알고리즘으로 분류되어 있다.이는 최대 1500개의 점에서 3개를 골라야 할 때, 무지성 탐색이 가능하다는 뜻이다. 무지성 탐색에서 나온 3개의 점에서 각 점 사이의 길이를 구하고 그 길이를 피타고라스 정리 공식을 이용해 직각삼각형인지 파악하면 된다.두 점 (x1, y1), (x2, y2)가 있을 때, 두 점사이의 거리는(x2 - x1) * (x2 - x1)의 제곱 + (y2 - y1) * (y2 - y1)의 제곱에 루트를 씌운 값.. 2024. 10. 1.
728x90
반응형