티스토리 뷰
코드카타
각도기
문제
정답
class Solution {
fun solution(angle: Int): Int {
return when {
angle < 90 -> 1 // 예각
angle == 90 -> 2 // 직각
angle < 180 -> 3 // 둔각
angle == 180 -> 4 // 평각
else -> -1 // 180도를 초과하는 경우는 정의되지 않음
}
}
}
when 함수를 이용해 angle값에 따라
문제조건에 맞는 숫자를 반환하도록 했다.
when 함수
when (변수) {
case1 -> 동작1
case2 -> 동작2
else -> 동작3
}
when 함수는 switch case문과 비슷하다.
when함수의 인자값으로는 선언해둔 변수가 들어가게 되고
선언해둔 변수값에 따라서 실행할 동작을 정의할 수 있다.
위 코드처럼 ()를 생략하고 case가 들어갈 자리에 조건문을 넣고
'동작'이 들어갈 자리에 값을 넣어 값을 반환하도록 할 수도 있다.
switch case문과 마찬가지로 else가 무조건 들어가야 한다.
짝수의 합
문제
정답
class Solution {
fun solution(n: Int): Int {
var sum: Int = 0
for(i in 1..n){
if (i % 2 == 0){
sum += i
}
}
return sum
}
}
n이하의 짝수를 모두 더한 값을 저장할 int형 변수 sum을 선언한다.
1~n 까지의 수 중 짝수인 값은 sum에다 더한 후 sum을 반환한다.
for문
for(i: Int in 1..10)
print("$i ") //output : 1 ~ 10
val n: Int = 5
for(i in 1..n)
print("$i ") //output : 1 ~ 5
for(i in 1 until n)
print("$i ") //output : 1 ~ 4
1..n 은 1 ~ n 까지의 범위를 의미하고, 1 until n은 1 ~ n-1 까지의 범위를 의미한다.
배열의 평균값
문제
정답
class Solution {
fun solution(numbers: IntArray): Double {
val sum = numbers.sum()
return sum.toDouble() / numbers.size
}
}
배열의 합은 가변값이 아니므로 배열의 합을 저장할 sum변수는 val을 써서 선언해준다.
sum은 정수배열의 합이므로 sum의 자료형은 정수형이다.
배열.size는 배열의 길이(정수형)를 뜻한다.
solution 함수는 Double형을 반환하므로 sum을 Double형으로 변환해
함수가 반환하는 값이 Double형이도록 해준다.
짝수와 홀수
문제
정답
class Solution {
fun solution(num: Int): String {
return if (num % 2 == 0) "Even" else "Odd"
}
}
if else문으로 간단하게 풀 수 있다.
평균 구하기
문제
정답
class Solution {
fun solution(numbers: IntArray): Double {
return numbers.average()
}
}
배열.average()로 배열의 평균값을 구할 수 있다.
근데 왜 코드카타에 똑같은 문제가;;
자릿수 더하기
문제
정답
class Solution {
fun solution(N: Int): Int {
return N.toString().map{ it - '0' }.sum()
}
}
각 자릿수의 합을 구하기 위해 N을 문자열로 변환한다.
map을 이용해 문자를 정수 변환
N = '123'
N.map{ it - '0' }
/*
'1' - '0' = 48 - 48 = 0
'2' - '0' = 49 - 48 = 1
'3' - '0' = 50 - 48 = 2
*/
N.map{it - 0} 함수를 통해 N의 요소를 정수값으로 변환한다.
N의 자리에는 배열 혹은 문자열이 오게 된다.
N.map{ it - '0' } 에서 it은 N의 요소를 뜻한다.
it(문자)에서 '0'(문자)를 빼게 된다면 아스키코드를 반환하게 되고
결과적으로 문자를 정수형으로 바꿀 수가 있다.
약수의 합
문제
정답
class Solution {
fun solution(n: Int): Int {
var sum: Int = 0
for(i in 1..n){
if(n % i == 0){
sum += i
}
}
return sum
}
}
'짝수의 합' 문제처럼 풀면된다.
1~n 까지의 값 중 n이랑 나뉘어 떨어지는 값을 sum에 더해주면 된다.
안드로이드 아키텍쳐
소스코드가 실행되는 과정
1. 코틀린으로 소스 코드를 작성합니다.
2. 소스코드를 안드로이드에서 실행될 수 있는 설치 파일의 형태로 반환한다.
3. 구글 플레이 스토어에 앱을 업로드 후 등록한다.
4. 스마트폰으로 구글 플레이 스토어에 접속한 다음 설치할 앱을 선택하고 설치한다.
5. 아이콘을 터치해서 앱을 실행합니다.
설치 파일 생성: 이 과정에서 소스 코드를 바이트코드로 변환하며 APK 매니저에서
비밀번호를 가지고 있는 키 스토어와 조합해서 최종 설치 파일을 생성한다.
업로드: 파일을 업로드하 후 구글 플레이 스토어에서 앱을 검수하는 과정을 거친다.
이 때 설치 파일이 정상적으로 동작하는지, 보안상의 문제는 없는지 등을 검사한다.
앱 선택: 스마트폰으로 구글 플레이 스토어에 접속하면 스마트폰의
플랫폼 버전을 확인한 다음 설치 가능한 앱의 목록만 보여줍니다.
앱 설치: APK 파일을 설치하면 리눅스에서 실행 가능한 파일로 안드로이드폰 내부에서 한 번 더 컴파일한다.
이 과정을 통해 실행 속도가 빨라지며 사용자에게 기능의 사용권한을 요청한다.
스마트폰에서 실행': 앱을 설치할 때는 필요한 파일만 컴파일한다.
앱을 실행할 때 미리 컴파일되지 않은 파일을 호출하면서 리눅스 실행 파일로 컴파일한다.
권한 중에 '실행 시 권한'이 포함되어 있으면 해당 코드가 동작해 사용자에게 확인 요청을 한다.
빌드
빌드의 정의
소스 코드를 변환해서 안드로이드의 실행 파일인 APK 파일로 만드는 것을 빌드(Build)라고 한다.
컴파일이란?
컴파일(Compile)이란 사람이 읽을 수 있는 형태의 소스 코드를
컴퓨터가 읽을 수 있는 형태의 기계어로 변환해주는 과정이다.
리눅스에서의 빌드
소스 코드를 컴퓨터가 읽을 수 있는 기계어로 번역(컴파일)하고,
소스 코드에서 사용하는 라이브러리와 연결해서 최종 실행 파일 형태로 만드는 것입니다.
안드로이드에서의 빌드
리눅스 컴파일과의 차이점은 안드로이드에는 리소스(Resource)라는 개념이 있다는 점이다.
안드로이드는 2단계로 컴파일을 나눌 수 있다.
1단계는 바이트코드 단계이다.
소스 코드와 리소스(이미지 파일, 음악 파일 등), 라이브러리까지 한 번에 컴파일 해준다.
이 때 생성된 파일은 안드로이드 플랫폼에서 인식할 수 있는 바이트코드로 컴파일된다
.
2단계는 APK 파일 생성 단계이다.
1단계에서 생성된 파일을 APK 매니저라는 도구로
개발자가 설정한 패스워드와 조합해서 설치 파일인 APK 파일로 만들어준다.
이렇게 1단계와 2단계를 모두 거쳐 APK 파일이 생성되는 과정을 빌드라고 한다.
설치와 실행
설치한 앱은 가장 상단에 있는 애플리케이션 영역에서 동작하고,
안드로이드는 중간에 있는 안드로이드 런타임 영역에서 개발자가 만든 앱을 제어한다.
설치 파일의 일부가 리눅스 운영체제에서 실행 할 수 있는 파일 형태로
한 번 더 컴파일되는데 이런 구조를 AOT(Ahead of Time)라고 한다.
앱을 실행하면 호출되는 파일 중에서 컴파일 되지 않았던 파일이
한 번 더 컴파일 되는데 이 구조를 JIT(Just in Time)라고 한다.
'내일배움캠프 > Android 사전캠프' 카테고리의 다른 글
사전캠프 TIL 6일차 (안드로이드 개발환경 세팅) (0) | 2024.04.30 |
---|---|
사전캠프 TIL 5일차 (음양 더하기, 핸드폰 번호 가리기, 없는 숫자 더하기, 제일 작은 수 제거하기 - Kotlin) (0) | 2024.04.29 |
사전캠프 TIL 4일차 (하샤드 수, 두 정수 사이의 합, 콜라츠 추측, 서울에서 김서방 찾기, 나누어 떨어지는 숫자 배열 - Kotlin) (0) | 2024.04.25 |
사전캠프 TIL 3일차 (안드로이드 확장 라이브러리 알아보기) (0) | 2024.04.24 |
사전캠프 TIL 1일차 (안드로이드와 코틀린 알아보기) (0) | 2024.04.22 |