티스토리 뷰

코드카타

 

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() 메서드를 호출해 액티비티를 종료시킨다.

액티비티가 종료되면 현재 액티비티를 스택에서 제거시키고 이전 액티비티로 돌아가게 된다.

 

 

테스트

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함