티스토리 뷰
코드카타
3진법 뒤집기
문제
정답
class Solution {
fun solution(n: Int): Int {
return n.toString(3).reversed().toInt(3)
}
}
n을 3진수 문자열로 변환해 뒤집고 다시 10진수 정수로 변환한다.
진수변환
// 10진수 -> n진수
n.toString(n)
// n진수 -> 10진수
n.toInt(n)
문자열 변환 함수에서 인자값(int)을 주면 10진수를 n진수로 변환해주고
정수 변환 함수에서 인자값(int)를 주면 n진수를 10진수로 변환해준다.
BMI 계산기
특정 위젯을 변수에 저장하기
val heightEditText = findViewById<EditText>(R.id.et_height)
val weightEditText = findViewById<EditText>(R.id.et_weight)
val submitButton = findViewById<Button>(R.id.btn_check)
8일차에서 위젯의 아이디를 설정해줬던 것은
아이디를 통해 특정 위젯을 변수에 불러오기 위해서였다.
val 변수명 = findViewById<위젯명>(R.id.위젯 아이디)
이런식으로 변수에 특정 위젯을 불러올 수가 있다.
자바스크립트와 상당히 유사한 방식이다.
결과화면에 키, 몸무게 값 넘겨주기
submitButton.setOnClickListener {
//버튼을 눌렀을 때 작동할 코드 작성
}
'버튼위젯 변수.setOnClickListener{}'로
버튼을 눌렀을 때 특정 동작을 작동시킬 수 있다.
val height: Int = heightEditText.text.toString().toInt()
val weight: Int = weightEditText.text.toString().toInt()
신장과 체중 각각의 텍스트필드에 입력한 값으로 설정한다
.
val intent = Intent(this, ResultActivity::class.java)
intent.putExtra("height", height)
intent.putExtra("weight", weight)
'ResultActivity Intent' 클래스의 인스턴스로 신장과 체중값을 넘겨주기 위한
Intent 객체를 생성한 뒤 'putExtra' 메서드를 사용해 Intent에 데이터를 추가한다.
startActivity(intent)
'startActivity(intent)' 를 호출하여 인텐트에 정의된 ResultActivity를 시작한다.
이 메서드는 intent에 설정된 액티비티를 활성화하며, 그 결과로 화면이 전환되어
사용자가 새로운 액티비티를 볼 수 있도록 한다.
BMI 계산 결과 화면 출력
val height = intent.getIntExtra("height", 0)
val weight = intent.getIntExtra("weight", 0)
입력화면에서 넘겨준 intent에서 각각의 키에 저장한 키값을 변수에 저장한다.
해당 키값이 존재하지 않는다면 변수의 값을 0으로 초기화한다.
var bmi:Double = weight / (height / 100.0).pow(2.0)
bmi = round(bmi * 10) / 10
bmi는 '신장 / (체중)^2' 의 값을 가진다.
bmi값은 round() 함수를 이용해 소수점 첫째자리까지만 출력해준다.
val bmi = 18.8267934...
bmi = round(bmi * 10) / 10
print(bmi) // 188/10 -> 18.8
round() 함수는 매개변수로 받은 값을 가장 가까운 정수로 반올림한 후 Long으로 반환한다.
해당 코드는 BMI 값을 소수 첫 번째 자리에서 반올림하고, 결과적으로 Double로 다시 변환하게 된다.
var resText = ""
var resImage = 0
var resColor = 0
if (bmi < 18.5) {
resText = "저체중"
resImage = R.drawable.lv1
resColor = Color.parseColor("#8FABC9")
} else if (bmi >= 18.5 && bmi < 25.0) {
resText = "표준"
resImage = R.drawable.lv2
resColor = Color.parseColor("#97CA01")
} else if (bmi >= 25.0 && bmi < 30) {
resText = "과체중"
resImage = R.drawable.lv3
resColor = Color.parseColor("#FFD600")
} else if (bmi >= 30 && bmi < 35.0) {
resText = "비만"
resImage = R.drawable.lv4
resColor = Color.parseColor("#FF8901")
} else {
resText = "고도비만"
resImage = R.drawable.lv5
resColor = Color.parseColor("#FE4C02")
}
bmi값에 따라 글자, 이미지, 글자색을 다르게 초기화한다.
val tv_resValue = findViewById<TextView>(R.id.tv_ResValue)
val tv_resText = findViewById<TextView>(R.id.tv_resText)
val iv_image = findViewById<ImageView>(R.id.iv_image)
val btn_back = findViewById<Button>(R.id.btn_back)
tv_resValue.text = bmi.toString()
tv_resText.text = resText
tv_resText.setTextColor(resColor)
iv_image.setImageResource(resImage)
bmi값에 따라 초기화된 값들을 각자 해당하는 위젯에 적용해준다.
btn_back.setOnClickListener {
finish()
}
'돌아가기' 버튼을 누르면 finish() 메서드를 호출해 액티비티를 종료시킨다.
액티비티가 종료되면 현재 액티비티를 스택에서 제거시키고 이전 액티비티로 돌아가게 된다.
테스트
'Android 사전캠프' 카테고리의 다른 글
사전캠프 TIL 11일차 (크기가 작은 부분 문자열, 최소직사각형 - Kotlin | 로또 번호 생성기 기능 구현) (0) | 2024.05.08 |
---|---|
사전캠프 TIL 10일차 (이상한 문자 만들기, 삼총사 - Kotlin | 로또 번호 생성기 UI 구현) (0) | 2024.05.07 |
사전캠프 TIL 8일차 (직사각형 별찍기, 최대공약수와 최대공배수 - Kotlin) (2) | 2024.05.02 |
사전캠프 TIL 7일차 (BMI 계산기 UI 구현) (2) | 2024.05.01 |
사전캠프 TIL 6일차 (안드로이드 개발환경 세팅) (0) | 2024.04.30 |
- Total
- Today
- Yesterday
- 코틀린
- 9 to 9
- 귤 고르기
- 뷰
- 안드로이드 스튜디오
- 무스마
- 국비지원
- 그룹화
- 기초 문제
- 레이아웃
- 파이썬
- 프로그래머스
- shared_preferences
- 행렬의 내적
- 위젯
- 프로그래머스 #코틀린 #map
- kakao api
- android 부트캠프
- 플러터
- 개발블로그
- 스파트타 코딩클럽
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |