전체 글397 [Compose] Compose의 Side-Effect(1) Compose의 부수 효과 부수 효과는 구성 가능한 함수의 범위 밖에서 발생하는 앱 상태에 관한 변경사항이다. 즉 자신이 아닌 외부의 상태에 영향을 만드는 것이다. 예측할 수 없는 리컴포지션 또는 예상과는 다른 Composable의 리컴포지션 실행, 삭제할 수 없는 리컴포지션 등의 속성과 Composable의 수명 주기로 인해 부수 효과가 없는 것이 좋다. 하지만 스낵바를 표시하거나 특정 상태 조건에 따라 다른 화면으로 이동하는 등 일회성 이벤트를 트리거할 때 부수 효과가 필요하기도 하다. Composable에서 Composable이 아닌 앱 상태에 대한 변화를 주는 것이므로 양방향 의존성으로 인해 예측할 수 없는 Effect가 생길 수 있다. 이 Effect를 Side Effect(부수 효과)라고 한다.. Android/Compose 2023. 4. 25. [Compose] Compose에서의 상태 단순히 행과 열, 버튼을 생성하는 것은 정적 레이아웃에 해당한다. 이제 사용자에 의해 변경사항이 있을 때마다 화면과의 상호작용을 하는 동적 레이아웃을 알아보자. @Composable fun Greeting(name: String) { var expanded = false Surface( modifier = Modifier.padding(24.dp) ) { Row( modifier = Modifier .padding(24.dp) .border(1.dp, Color.Black) ) { Column(Modifier.padding(3.dp)) { Text(text = "Hello, ") Text(name) } ElevatedButton(onClick = {expanded = !expanded} ) { Text(.. Android/Compose 2023. 4. 3. [Compose] Composable 재사용 우리는 코드를 작성할 때 흔히 함수를 사용하고 한다. 함수를 사용하는 이유는 무엇일까? 가독성을 좋게하기 위해 여러 곳에서 같은 기능이 사용된다면, 하나의 함수로 만들어 재사용하기 위해 Compose Function 또한 함수와 같이 재사용이 가능하다. UI에 구성요소가 증가할수록 중첩되는 레벨이 오르며, 가독성이 떨어질 수 있다. 이를 해결하기 위해 작은 구성요소로 만들어 UI 요소의 라이브러리로 쉽게 만들 수 있다. 예시를 들어보자. @Composable fun Greeting(name: String) { Surface(color = MaterialTheme.colorScheme.primary) { Text(text = "Hello $name!", modifier = Modifier.padding(2.. Android/Compose 2023. 3. 27. [Compose] Surface, Modifier, Row, Column, 버튼 생성 Surface Surface는 요소를 감싸는 컨테이너의 역할을 한다. 사용법은 다음과 같다. @Composable fun Greeting(name: String) { Surface(color = MaterialTheme.colorScheme.primary) { Text(text = "Hello $name!") } } 위에서도 말했듯이 요소를 감싸는 컨테이너의 역할을 하므로 색상을 지정할 수 있다. 색상을 지정하지 않으면 기본 흰 화면으로 보이게 된다. Modifier Surface가 요소를 감싸는 컨테이너라면, Modifer는 레이아웃, 색상 등 스타일을 수정할 수 있도록 해준다. modifer는 Surface와 Text 등 대부분의 Compose UI 요소에서 선택적으로 매개변수로서 허용된다. 사용법을.. Android/Compose 2023. 3. 27. [Compose] Compose란? 학교 동아리를 진행하며 안드로이드를 공부하던 중, 동아리 내에서의 Compose 스터디를 시작하게 되었다. Compose 스터디에 참여하게 된 계기는 단순히 ui를 만들던 중 Compose를 사용하면 좀 더 쉽게 만들 수 있다는 얘기를 들어서였다. Compose를 공부할 겸 겸사겸사 알아가는 내용들을 적어볼 것이다. 첫 번째 내용으로는 "Compose란 무엇인가?"부터 시작하려고 한다. Compose란? 우선 UI의 방식에 대해 알아보면, UI에는 선언형 UI와 명령어 UI가 있다고 한다. 둘의 차이점을 다음과 같이 예로 들어볼 수 있을 것 같다. (내가 생각해본 것이라 맞을지는 잘 모르겠다.) 선언형 UI: 내 방의 벽지는 초록색이고 거울, 모니터, 화장품이 있어. 명령형 UI: 내 방에 초록 벽지를 .. Android/Compose 2023. 3. 19. [백준/BOJ] 3197번: 백조의 호수 문제 https://www.acmicpc.net/problem/3197 3197번: 백조의 호수 입력의 첫째 줄에는 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1500. 다음 R개의 줄에는 각각 길이 C의 문자열이 하나씩 주어진다. '.'은 물 공간, 'X'는 빙판 공간, 'L'은 백조가 있는 공간으로 나타낸다. www.acmicpc.net 해설 예전에 시도했던 문제인데 시간초과가 나서 포기했던 문제이다. 오늘 와서 다시 도전해 봤는데 역시나 어떻게 해야 시간초과를 해결할 수 있을지 감이 잡히지 않아 결국 구글링을 하여 이해를 하였다. 처음에 나는 백조를 움직이고, 물을 녹이고 즉, 2개의 큐만을 사용해 문제를 해결하려 했었다. 이 방법으로는 백조가 계속 모든 맵을 탐험하게 되므로 시간초과가 나게 된.. PS(Problem Solving)/BOJ 2023. 2. 13. [백준/BOJ] 1149번: RGB거리 문제 https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 해설 다른 알고리즘에 비해 DP에 취약한 것 같아 쉬운 문제부터 풀어보자라는 마음으로 풀어보았다. 이 문제는 어떻게 풀어야할까 고민하던 중 문제의 조건을 다시 한번 읽어보니 힌트를 찾을 수 있었다. 문제에는 3개의 조건이 있지만 결론적으로는 n번째 집은 n-1번째 집과 n+1번째 집과의 색이 달라야 한다는 것이다. 예를 들어 현재 위치의 집을 빨간색으로 하고 싶다면 이전.. PS(Problem Solving)/BOJ 2023. 2. 8. [백준/BOJ] 1213번: 팰린드롬 만들기 문제 https://www.acmicpc.net/problem/1213 PS(Problem Solving)/BOJ 2023. 1. 17. [백준/BOJ] 2503번: 숫자 야구 문제 https://www.acmicpc.net/problem/2503 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 해설 문제에 주어진 조건을 보자. 1에서 9까지의 "서로 다른 숫자 세 개"로 구성된 세 자리 수 즉, 0도 포함되지 않는다는 것이다. 따라서 123부터 987까지의 숫자 중 답이 될 수 있는 경우가 있다는 것이 된다. 단순하게 123부터 987까지를 반복문을 통해 모두 확인하며, 입력한 수에 대해 모두 만족한다면 답이 될 수 있는 경우가 된다. 즉, strike의 개수와 ball의 개수가 .. PS(Problem Solving)/BOJ 2023. 1. 16. [백준/BOJ] 1937번: 욕심쟁이 판다 문제 https://www.acmicpc.net/problem/1937 1937번: 욕심쟁이 판다 n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에 www.acmicpc.net 풀이 처음에 문제를 봤을 때 "아 가장 길이가 짧은 곳에서부터 시작하면 되겠구나" 라는 생각을 하였다. 하지만 예시를 보고서는 "어라? 이게 왜 이 값이 나오지?" 하고 보니 꼭 최소 길이부터 시작한다고 가장 많이 간다는 것이 아니었다. 쨌든 이 문제를 dfs를 통해 푼다는 것은 변하지 않는다. 여기에 더해 dp를 추가로 이용했는데, 모든 칸을 dfs로 돌리면 시간이 오래 걸려 시.. PS(Problem Solving)/BOJ 2023. 1. 11. [백준/BOJ] 9466번: 텀 프로젝트 문제 https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 해설 우선 배열의 인덱스는 0부터 시작이므로 각 학생을 0번부터 시작하도록 -1을 해준다. 예시 입력1의 첫번째 테스트 케이스는 다음과 같이 된다. 학생들은 서로 원하는 경우에만 팀이 될 수 있다. 즉, 사이클이 형성되야만 팀이 될 수 있다는 것이다. 우선 필요한 변수들을 생각해보자. 이미 방문했던 칸은 재방문할 필요가 없으므로 방문 여부를 처리해줄 visited 배열을 선언한다. 또한 사이클이 .. PS(Problem Solving)/BOJ 2023. 1. 10. [백준/BOJ] 10451번: 순열 사이클 문제 https://www.acmicpc.net/problem/10451 10451번: 순열 사이클 1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\ 3 www.acmicpc.net 해설 위 그림은 예제 입력의 첫 번째 테스트케이스이다. 색을 맞춰보면 case1. case2. case3 1 → 3 2 → 2 4 → 8 3 → 7 8 → 6 7 → 5 6 → 4 5 → 1 이처럼 3가지의 순환 사이클로 나뉘는 것을 확인할 수 있다. 이를 구현하는 방법을 알아보자. 나의 경우 Map에 인덱스와 값을 저.. PS(Problem Solving)/BOJ 2023. 1. 9. [백준/BOJ] 14503번: 로봇 청소기 문제 https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 해설 처음 문제를 해결하려 할 때 방향에 대해서 헷갈렸지만 별거 없는 것이었다. "바라보고 있는 방향의 왼쪽에 청소하지 않은 칸이 있다면 그 칸으로 이동한다". 즉, 내가 북쪽을 보고 있을 때, 서쪽을 보고 청소가 되있지 않다면 청소하러 가라인 것이다. 다음으로 4칸이 모두 벽과 청소한 구역으로 이루어져 있어 이동할 수 없는 경우 방향을 유지한 채로 뒤로 한칸 간다. 이때 뒤의 방향이 벽이.. PS(Problem Solving)/BOJ 2023. 1. 4. [백준/BOJ] 17086번: 아기 상어2 문제 https://www.acmicpc.net/problem/17086 17086번: 아기 상어 2 첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸과 상어의 수가 각각 한 개 이상인 입력만 www.acmicpc.net 해설 처음에는 0인 모든 지점에서 bfs를 수행시켜 가장 가까운 상어까지의 거리를 구하려고 하였다. 하지만 왠지 모르게 계속해서 답이 아닌 값이 나와 다른 방법으로 접근을 해보자는 생각을 했다. 여기서 생각해낸 것은 각 상어가 있는 지점부터 다른 상어가 있는 지점까지를 구해보자였다. 즉, 모든 상어가 있는 지점을 큐에 넣어준 후 bfs를 수행시키는 것이다. 과정은.. PS(Problem Solving)/BOJ 2023. 1. 3. [백준/BOJ] 1644번: 소수의 연속합 문제 https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 해설 하나의 정수를 입력받고 이를 소수의 합으로 나타낼 수 있는 경우의 수를 구하는 문제이다. 즉, 입력받은 정수까지의 소수 목록을 구하는 것이 첫번째 과정이 된다. 이때 에라토스테네스의 채를 이용하여 소수 목록을 구할 수 있다. private val primeList = mutableListOf(0) private fun eratosthenes(n: Int) { val arr = BooleanArray(n + 1) { true } for(i in 2 .. sqrt(n.toDouble()).toInt()) { .. PS(Problem Solving)/BOJ 2022. 12. 17. [컴퓨터 네트워크] 라우팅 프로토콜: RIP 라우팅 프로토콜 관점의 인터넷 AS(Autonomous System)들의 상호 연결 AS(Autonomous System) 인터넷상의 개별적인 라우팅 관리 도메인(ISP) 인터넷 라우팅 전체 인터넷을 여러 개의 AS로 나누고, AS 내부는 각각 독립적인 라우팅 프로토콜 적용 AS 간 라우팅은 각 AS를 연결하는 라우터들 간에 별도의 프로토콜로 수행 Intra-AS 라우팅 프로토콜 AS 내부에 적용 가능한 라우팅 프로토콜(Interior Gateway Protocol) RIP, OSPF 등등 Inter-AS 라우팅 프로토콜 AS 간에 적용가능한 라우팅 프로토콜(Exterior Gateway Protocol) BGP RIP(Routing Information Protocol) 초기 IP와 함께 개발된 최초의.. Computer Network 2022. 11. 27. [컴퓨터 네트워크] 링크 상태 라우팅(Link State Routing) 알고리즘 링크 상태 데이터 베이스 유지 각 라우터가 전체 네트워크의 구성과 링크 상태 정보를 유지 글로벌 라우팅(Global Rounting) 다익스트라 알고리즘(Dijkstra Algorithm) 각 라우터가 다익스트라 알고리즘을 수행하여 전체 k개의 목적지 라우터에 대한 최소 비용 경로와 다음 라우터를 계산한다. 라우팅 테이블 설정 목적지, 최소 비용 경로 상의 다음 라우터, 비용 설정 LSP(Link State Packet) 플러딩(flooding) 링크 상태 공유, 다익스트라 알고리즘과 별개의 라우팅 프로토콜에 의해 수행 링크 상태 데이터베이스(Link-State DB) LSP 플로딩 결과 모든 라우터가 동일한 LSDB 유지 각 라우터가 알려진 LSDB에 대해 수행 직접 연결된 링크 중에 비용이 가장 작은.. Computer Network 2022. 11. 23. [컴퓨터 네트워크] 거리 벡터(Distance Vector) 라우팅 알고리즘 인터넷: 가중치 그래프(Weighted Graph) 라우터들을 비용이 매겨진 링크로 연결한 그래프 링크의 유형에 따라 링크 사용 비용에 차이 라우터가 선호하는 링크의 비용이 낮다. 최소경로비용: 출발지 라우터와 목적지 라우터를 연결하는 경로 중에 링크 비용의 합이 가장 작은 경로 링크 비용: c(u, x) = 1, 최소경로비용 Duz = 4 인터넷 라우팅: Hob-by-Hop 라우터들을 비용이 매겨진 링크로 연결한 그래프에서 출발지 라우터에서 목적지 네트워크의 라우터까지 최소 비용 경로를 찾는다. 최소 비용 경로 상의 다음 라우터의 주소를 라우팅 테이블에 저장한다. 거리 벡터(Distance Vector) 특정 라우터에서 다른 모든 라우터까지의 최소 경로 비용을 갖는 1열 벡터 u[ ]: 라우터 u의 전.. Computer Network 2022. 11. 23. [컴퓨터 네트워크] NAT(Network Address Translation) 공인 IP 주소(Public IP Address) 인터넷에서 사용되는 주소 IP 주소 할당 기관에 의해 할당된 주소 인터넷상에서 유일한 주소 사설 IP 주소(Private IP Address) 인터넷 미연결 TCP / IP 네트워크를 위한 IP 주소 인터넷 IP 주소 관리 대상에 불포함 서로 다른 네트워크에서 중복 사용 가능 인터넷 IP 주소와 엄격하게 구분(인터넷에서 사용 불가) 서브넷마스크 없어도 된다. 사설 IP 주소 범위 클래스 A: 10.0.0.0 ~ 10.255.255.255 클래스 B: 172.16.0.0 ~ 172.31.255.255 클래스 C: 192.168.0.0 ~ 192.168.255.255 사설 IP 주소 할당 임의로 할당 가능 사설 IP 주소 사용 네트워크 내에서 유일하게 할당 .. Computer Network 2022. 11. 20. [컴퓨터 네트워크] DHCP(Dynamic Host ConfigurationProtocol) IP 주소 할당 고정 할당(Static Allocation): 수동 할당, 고정 할당 동적 할당(Dynamic Allocation): 자동 할당, 유동 할당 DHCP DHCP 서버에 의한 호스트 구성 정보 동적 할당 절차 정의 IP 주소, 서브넷마스크, 디폴트 게이트웨이 주소, DNS 서버 주소 등 구성 정보 자동 할당 DHCP의 장점 사용자 편의성 IP 주소 절약(필요할 때만 할당, 동시 사용자 수만큼 할당) 호스트 구성 정보 IP 주소: 호스트 IP 주소 서브넷마스크: 네트워크 ID 필드 크기, 네트워크 주소 구분을 위한 필수 정보 디폴트 게이트웨이 주소: 자신의 네트워크에 연결된 라우터의 주소, 목적지 주소가 동일 네트워크에 존재하지 않을 때 IP 데이터그램을 전달할 다음 홉 주소 DNS 서버 주소.. Computer Network 2022. 11. 20. 이전 1 2 3 4 5 ··· 20 다음 728x90