본문 바로가기

전체 글269

[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.
[Kotlin, G4] 백준 9935번 문자열 폭발 문자열 폭발(9935번)Gold 4#자료 구조 #문자열 #스택https://www.acmicpc.net/problem/9935 문제 내용  문제 접근첫 번째 줄의 문자열에서 두 번째 문자열이 존재하지 않을 때까지 문자열을 제거한 결과를 출력하는 문제.문자열이 제거되고 남은 문자열들은 서로 붙어서 새 문자열이 된다. 단순히 문자열을 확인해 보면서 문자열을 제거해 나가면 되는 간단한 문제이다.그래서 일단은 replace를 반복시켜서 진행해 보았다.while (true) { val replaceRes = string.replace(removeStr, "") if (replaceRes != string) string = replaceRes else break}결과는 메모리 초과, 애초에 repl.. 2024. 10. 1.
[Kotlin, S2] 백준 14430번 자원 캐기 자원 캐기(14430번)Silver 2#다이나믹 프로그래밍https://www.acmicpc.net/problem/14430 문제 내용  문제 접근wook이 0, 0에서 n, m까지 이동할 때, 오른쪽, 아래쪽으로만 이동하면서 자원을 캘 수 있을 때, n, m까지 도달했을 때, 얻을 수 있는 자원의 최대 개수를 구해야 한다. 얻을 수 있는 최대 자원 개수를 구하는 방법은 입력 예제 1을 예로 설명해 주겠다.5 40 1 0 00 0 1 01 1 0 01 0 1 01 1 0 0// init dp array0 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0 처음의 0, 0 부분은 입력값을 그대로 사용한다.그러면 2차원 array를 모두 0으로 초기화했을 때 0, 0에는 0 또는 1이 오게 될 것이.. 2024. 9. 30.
[Kotlin, S4] 백준 2358번 평행선 평행선(2358번)Silver 4#자료 구조 #정렬 #해시를 사용한 집합과 맵https://www.acmicpc.net/problem/2358 문제 내용  문제 접근2개 이상의 점을 지나는 선분에서 x축 또는 y축에 평행한 선분의 개수를 세는 문제.선분의 구성이 2개 이상의 점을 지날 수도 있고, 한 좌표에 점이 여러 개가 있을 수도 있다.// 선분의 구성에 2개 이상의 점이 쓰이는 경우41 02 03 04 0정답: 1// 한 좌표에 여러 점이 있는 경우21 11 1정답: 2첫 번째 case가 이해하기 어려웠다.문제를 처음 읽었을 때는 2개 이상의 점을 지나는 선분이라는 것을 못 보고 2개의 점을 지나는 선분이라고 생각해서 왜 1개가 나오는지 헷갈렸다.case 1의 경우에는 점 4개를 연결한 y축과 평행.. 2024. 9. 26.
[Android] 공부일지(2024-09-24) 오늘 공부한 내용 정리(2024년 9월 24일)  면접 이론 학습 27일 차면접 이론 학습 27일 차코루틴(Coroutine)이 무엇인가? 어떤 상황에서 유용하게 쓰일 수 있는가?코루틴은 together에 co와 집합을 뜻하는 routine이 합쳐져 협동 루틴을 뜻한다.이전에 실행이 중단된 지점에서 다시 실행을 재개할 수 있는 기능을 가진다.동시성 프로그래밍을 사용해야 할 때, 비동기로 작업을 처리해 멀티태스킹 기능을 만들어야 할 때 사용된다.  Android의 Looper와 MessageQueue의 작동 원리와 사용 방법Looper는 Message Queue를 생성하고 관리하는 역할로 Message나 Runnable 객체를 하나씩 꺼내서 Handler에 전달한다.Looper.loop()을 이용해 무한 .. 2024. 9. 24.
728x90