1. 전화연결을 한다. 2. 본인확인, 차 소유주 본인확인을 한다.(구두로) 3. 본인과 연결된 T map 안전점수 조회는 문자인증으로 확인한다. 4. 할인퍼센트에 따라 환급금과 앞으로 이체될 금액에 얼마를 할인받을 수 있는지 안내를 받는다.(전 보험금 분납이에요) 5. 통화 끝 6. 통화가 끝난 후 5분도 안돼서 입금이 된다.
전 정말 놀랐어요. 단지 어플 하나 점수를 확인하고
그 자리에서 바로 환급금과 앞으로 이체 될 보험금이 얼마나 할인을 받을 것인지가 결정되다니...
★텍스트뷰들의 ID를 잘 기억하세요. RecyclerViewAdapter.kt의 holder1 클래스에서 쓰입니다★
MainActivity.kt
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.util.*
class MainActivity : AppCompatActivity() {
//리사이클뷰를 레이아웃에 올리기 위해 참조용 변수
var recyclerView: RecyclerView? = null
//Item.kt에 있는 변수들 참조용. Item.kt안에 변수가 여러개니 ArrayList.
var list = arrayListOf<Item>(
Item("list의 첫번째 데이터","list의 두번째 데이터"),
Item("2list의 첫번째 데이터","2list의 두번째 데이터"),
Item("3list의 첫번째 데이터","3list의 두번째 데이터"),
Item("4list의 첫번째 데이터","4list의 두번째 데이터")
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//이 변수에 layout폴더에 있는 activity_main에 있는 리사이클러뷰를 연결시켜준다.
recyclerView = findViewById<View>(R.id.idOfRecyclerView_from_acitivity_main) as RecyclerView
//리사이클러뷰 크기가 변하지 않게 함
recyclerView!!.setHasFixedSize(true)
//리사이클러뷰를 앱에 그려주기 위해 필요하다.
val layoutManager = LinearLayoutManager(this)
layoutManager.orientation = LinearLayoutManager.VERTICAL
recyclerView!!.layoutManager = layoutManager
//RecyclerViewAdapter.kt에 있는 클래스 a1를 연결한다.(어뎁터를 연결한다는 의미)
val adapter = a1(applicationContext, list)
recyclerView!!.adapter = adapter
}
}
가능한 쉽게 이해되도록 주석도 써놨어요 하나하나 다 필요하고 서로서로 연결돼있는 부분이 많아요
RecyclerViewAdapter.kt
class a1(val context: Context, val b1: ArrayList<Item>): RecyclerView.Adapter<a1.holder1>(){
//이 부분은 showitem.xml을 activity_main에 있는 리사이클러뷰에 실어주는 역할은 한다.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): holder1 {
val aa1 = LayoutInflater.from(context).inflate(R.layout.showitem, parent, false)
//맨아래 holder1클래스에 aa1 정보를 넘겨준다
return holder1(aa1)
}
//b1 사이즈를 알아내오는 역할을 합니다. 현재로써는 중요하게 알지 안아도 됩니다
override fun getItemCount(): Int {
return b1.size
}
override fun onBindViewHolder(holder: holder1, position: Int) {
//b1 ArrayList에 담겨져있는 첫번째 데이터를 cc1에 담는 역할을 합니다
holder.cc1.text = b1[position].firstItem
//b1 ArrayList에 담겨져있는 두번째 데이터를 cc2에 담는 역할을 합니다
//position은 순서를 알려주는 역할을 합니다.
holder.cc2.text = b1[position].secondItem
}
//showitem.xml에 있는 텍스트뷰를 불러와서 cc1,cc2 변수에 담는 역할을 합니다
class holder1(c1: View): RecyclerView.ViewHolder(c1) {
val cc1 = c1.findViewById<TextView>(R.id.textView1)
val cc2 = c1.findViewById<TextView>(R.id.textView2)
}
}
이 부분도 마찬가지로 주석으로 잘 설명해놨어요
* 직접 설정해야할 변수옆에는 숫자까지 써놨어요 (Ex. 클래스명인 a1)
이게 작동하는 순서를 보여드리자면
첫번째 onCreateViewHolder 함수에서 activity_main의 리사이클뷰에 들어갈 공간을 만든다.
-> 이렇게 만들어진 공간을 holder1에서 받는다 -> holder1에서는 이 공간에 들어갈 showitem.xml의 정보를 불러와서 저장한다(골격을 잡는다) -> onBindViewHolder 함수에서 이 공간에 b1의 데이터를 담는다(진짜 데이터를 담는 구간)
* b1이란??
MainActivity.kt 맨 아래에 adapter 연결을 하면 MainActivity.kt의 list에 있는 데이터가 a1로 넘어올때 저장되는 곳
위의 함수들을 입력하는게 어렵다 하시면
아래와 같이 하세요
여기는 개발자가 직접 설정해줘야하는 부분이에요 일단은 저렇게 '틀'만 잡아주면 되구요
저 상태에서 a1 { } 안에서 컨트롤+O 버튼을 눌러서
위와 같이 필수 함수들을 추가시켜주시면 돼요.
*a1의 괄호안에 변수 설정할때 val context: Context는 항상 이렇게 쓴다고 기억하시면 돼요
Item.kt
class Item(var firstItem: String? = null,var secondItem: String? = null ) {
fun firstItem(firstItem: String?){
this.firstItem = firstItem
}
fun secondItem(secondItem: String?){
this.secondItem = secondItem
}
}
import java.io.*
import kotlin.math.abs
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = br.readLine().toInt()
bw.write("${d(n)}")
bw.flush()
bw.close()
}
fun d(n: Int): Int {
var cnt = 0
var arr = IntArray(3)
var w = 0
for ( i in 1..n) {
if (i in 1..99) cnt = i
else if ( i == 1000 ) break
else {
w = 0
var temp = i
while (temp > 0) {
arr[w] = temp % 10
temp /= 10
w++
}
if (arr[0] - arr[1] == arr[1] - arr[2]) cnt++
}
}
return cnt
}
//어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다.
// 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.