사진: Unsplash의Anne Nygård 안드로이드에서 Context를 얻을 수 있는 방법은 생각보다 많습니다. 다만 모두가 다 같은 Context를 말하는 것은 아닙니다. 프래그먼트에서 액티비티의 Context에 접근할 때, 왜 캐스팅을 해야만 Context를 사용할 수 있을까? 란 의문점에서 이번 게시글에서 정리해보고자 합니다. 액티비티에서 Context를 얻는 방법 액티비티에서 직접 Context 얻기 - `this` Context가 필요한 곳이 액티비티라면 Context을 얻을 수 있는 가장 간단한 방법은 `this`입니다. 이것이 어떻게 가능한 지는 액티비티의 상속 구조를 살펴보면 알 수 있습니다. 액티비티는 추상 클래스인 Context를 구현한 ContextImpl 클래스를 내부적으로 이용..
1516번: 게임 개발 첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부 www.acmicpc.net 사진: Unsplash의Lorenzo Herrera 문제 숌 회사에서 이번에 새로운 전략 시뮬레이션 게임 세준 크래프트를 개발하기로 하였다. 핵심적인 부분은 개발이 끝난 상태고, 종족별 균형과 전체 게임 시간 등을 조절하는 부분만 남아 있었다. 게임 플레이에 들어가는 시간은 상황에 따라 다를 수 있기 때문에, 모든 건물을 짓는데 걸리는 최소의 시간을 이용하여 근사하기로 하였다. 물론, 어떤 건물을 짓기 위해서 다른 건물을 먼저 지어야 할 수도 있기 때..
파일 I/O 처리 파일 처리는 Input / Output에 대한 데이터 처리를 말합니다. 이런 데이터가 처리되어 흐르는 `데이터의 흐름`을 Stream이라고 합니다. 자바에서는 이러한 기능을 수행하기 위해 입출력을 위한 기본 패키지인 `java.io`에 InputStream과 OutputStream이 존재하고 이를 기반으로 상속하여 바이트 단위로 처리하도록 하는 ByteArrayInputStream과 ByteArrayOutputStream이 있습니다. 바이트 스트림 데이터를 읽고 쓸 때 바이트 스트림을 사용합니다. 사용하는 방법은 아래와 같습니다. import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream val inScr = byt..
20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 문제 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 의미한다. 토네이도를 시전하면 격자의 가운데 칸부터 토네이도의 이동이 시작된다. 토네이도는 한 번에 한 칸 이동한다. 다음은 N = 7인 경우 토네이도의 이동이다. 토네이도가 한 칸 이동할 때마다 모래는 다음과 같이 일..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 나의 풀이 이 문제는 2가지의 조합을 이용해서 해결하였습니다. 첫번째 조합은 교환할 수 있는 모든 가짓수를 구한 조합입니다. 예를 들어 1, 2, 3의 원소가 있다면 (1, 2), (1, 3), (2, 3) 이렇게 3가지의 교환할 수 있는 가짓수가 나오게 됩니다. 두번째 조합은 이렇게 구한 가짓수에서 중복을 포함해서 교환할 원소를 횟수만큼 구합니다. 예를 들면 위에서 구한 가짓수에서 첫번째 교환을 3번, 첫번째 교환을 2번 두번째 교환을 1번 등등 이런식으로 진행합니다. 2가지 조합으로 구한 위치를 교환한 결과를 구하고 이를 변수에 최대값으로 저장합니다. impo..
사진: Unsplash의Anna Kolosyuk 우리는 안드로이드 개발을 하면서 XML을 통해 화면을 그리고 이를 사용해 왔습니다. 그런데 이게 어떤 과정으로 어떻게 이뤄지는지 생각해본적은 없는것 같습니다. 그래서 이번 게시글에서 안드로이드가 화면을 어떻게 그리는지 알아보고자 합니다. 안드로이드 프레임워크의 요청 안드로이드의 프레임워크는 Activity가 포커스를 받을 때, 레이아웃을 그리도록 Activity에 요청합니다. 안드로이드 프레임워크에서는 알아서 그리기 절차를 처리하지만 Activity에서는 레이아웃 계층 구조의 루트 노드를 제공해야 합니다. 루트노드는 `setContentView()` 메서드를 통해 제공합니다. 그렇기 때문에 무의식적으로 안드로이드를 개발하면서 아래와 같이 코드를 작성하고 루..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 준호는 요즘 디펜스 게임에 푹 빠져 있습니다. 디펜스 게임은 준호가 보유한 병사 n명으로 연속되는 적의 공격을 순서대로 막는 게임입니다. 디펜스 게임은 다음과 같은 규칙으로 진행됩니다. 준호는 처음에 병사 n명을 가지고 있습니다. 매 라운드마다 enemy[i]마리의 적이 등장합니다. 남은 병사 중 enemy[i]명 만큼 소모하여 enemy[i]마리의 적을 막을 수 있습니다. 예를 들어 남은 병사가 7명이고, 적의 수가 2마리인 경우, 현재 라운드를 막으면 7 - 2 = 5명의 병사가 남습니다. 남은..
JetPack Compose에 대한 이해 안드로이드 개발을 하면서 Compose를 사용하지 않는 것은 이제는 많이 뒤져치는 것 같습니다. 그렇기에 Compose를 제대로 공부해보고 있습니다. 다만 누가 "Compose에 대해서 이해하고 있느냐?" 라고 everyday-develop-myself.tistory.com 위의 게시글에서 Compose는 상태(State)를 UI로 변환하는데 3단계로 진행된다고 설명했습니다. 이번 게시글에서는 저번 게시글에서 설명했던 Composition 단계에 이어서 Layout 단계에 대해 설명하고자 합니다. 이 게시글의 내용은 아래의 영상에서 참고하였습니다. Layout 단계 Composition 단계에서는 composable 함수를 실행하고 다양한 상태의 여러 가지 UI ..