본문 바로가기

분류 전체보기260

[백준] 1789. 수들의합 (Java) [이분탐색] 문제 https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 알고리즘 이분탐색 + 수학 풀이 N까지의 합의 공식과 이분탐색을 이용해서 풀이를 했다. left+ right/2, 즉, 중간 값을 구해서 S를 찾아가는 과정이며 자세한 건 풀이를 보자. 코드 package com.company; import java.io.*; public class Test_BinarySearch { static long MAX = 4294967295L; static long ans = 0; public static void main(String args[]) throws IOExceptio.. 2023. 7. 8.
[백준] 2346. 풍선 터트리기 (Java) [Deque] 문제 https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 사용한 알고리즘 덱(Deque) 풀이 풍선이 양수, 음수일 때를 조건문으로 정해주고 Deque를 통해 방향 이동을 해주면 되는 문제였다. 종이가 양수 일 경우 앞 풍선을 뒤쪽으로 보내고, 종이가 음수 일 경우 뒤 풍선을 앞으로 보내주었다. 코드를 통해 확인해보자. 코드 package com.company; import java.io.*; import java.util.Arr.. 2023. 7. 6.
[백준] 10799. 쇠 막대기 (Java) [Stack] 문제 https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 사용한 알고리즘 Stack 풀이 괄호에서 레이저를 파악하는 것이 핵심인 문제였다. Stack을 통해 '('을 삽입을 하면서 '()'이 있는 경우는 레이저로 판단하여, 조건 문으로 분기를하여 풀이를 하였다. 자세한 것은 풀이를 확인해보자. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReade.. 2023. 7. 6.
[백준] 1966. 프린터 큐 (Java) [Queue + PrioirtyQueue] 문제 https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 사용한 알고리즘 큐(Queue) + 우선순위 큐(PriorityQueue) 풀이 큐(Queue)에 중요도(int)와 궁금한 문서인지 flag(boolean)을 저장하고, 우선순위큐(PriorityQueue)에 가장 높은 중요도를 저장하였다. 그런다음 큐에서 하나씩 아이템을 빼서 우선순위 큐에서 뺀 가장 높은 중요도 비교하여 문제를 풀었다. 자세한건 코드를 확인해보자. 코드 import java... 2023. 7. 5.
[Android] Flow 기초 Coroutine의 Flow는 데이터 스트림이며, 코루틴 상에서 리액티브 프로그래밍 지원 하기 위한 구성 요소이다. 이를 이해하기 위해서는 먼저 리액티브 (반응형) 프로그래밍이 무엇인지, 그리고 Flow가 리액티브 프로그래밍에 대응하여 어떠한 역할을 하는지를 알아야 한다. 리액티브 프로그래밍이란?리액티브 프로그래밍이란 데이터가 변경 될 때 이벤트를 발생시켜서 데이터를 계속해서 전달하도록 하는 프로그래밍 방식을 뜻한다.  기존 명령형 프로그래밍에서는 데이터의 소비자는 데이터를 요청한 후 받은 결과 값을 일회성으로 수신한다. 하지만, 이러한 방식은 데이터가 필요할 때마다 결과 값을 매번 요청해야 한다는 점에서 매우 비효율적이다. 리액티브 프로그래밍에서는 데이터를 발행하는 발행자가 있고 데이터의 소비자는 데이.. 2023. 6. 27.
[Hilt] 프로젝트에 의존성 주입(DI) 적용해보기 - Hilt + Retrofit 1. 의존성 주입build.gradle(Project)plugins { ... ... id 'com.google.dagger.hilt.android' version '2.41' apply false}build.gradle(Module)plugins { ... id 'dagger.hilt.android.plugin'}android { ... ... kapt { correctErrorTypes true }}dependencies { ... ... // Hilt implementation 'com.google.dagger:hilt-android:2.41' kapt 'com.google.dagger:hilt-compi.. 2023. 6. 27.