코틀린-안드로이드

5일차)알고리즘 문제(체육복,숫자짝꿍), 코틀린 문법

songyooho 2024. 5. 27. 20:37

>알고리즘 문제

1. MutableList 활용

1)선언(주로 쓰는것 위주로)

val mulist = MutableList<Int>(5, { i -> i})
val mulist = mutableListOf(10, 20, 30)
val mulist = mutableListOf<Int>()

2)활용이유: list와는 달리 가변적. 순서대로 사용되는 숫자인덱스가 포함된 문제에서 활용하기 쉬움

 

2.StringBulilder()

1)선언: val sb=StringBuilder()

2)사용 이유:

-여러번 수정이 필요한 문자열이 있는 경우 StringBuilder를 활용하는것이 실행시간이 아껴짐

-append이용시 자료형 상관없이 추가가능

3)수정

-.append()

-.deleteCharAt(index)//인덱스위치의 문자삭제

-.delete(start,end)//start이상 end미만 인덱스 문자 삭제

-.length//길이 반환

-.reverse//거꾸로 뒤집기

-insert(index,value)//인덱스 위치에 값을 넣음(append의 위치지정 버전)

4)String으로 사용: .toString()사용시 문자열로 바뀜

 

3. 기타 문자열 활용 함수들

-joinToString(): 문자나 문자열로 이루어진 배열의 원소들을 이어붙여 하나의 문자열로 만들음

-replace(a,b): a,b는 문자열.  a를 모두 b로 바꿈

-sortedArray(), sortedArrayDescending(): 배열 정렬

-toCharArray():문자열을 문자 배열로 변환. 정렬같은거에 사

 

4. 아스키 코드

1)변환: 문자<ㅡ>숫자간 변환시 toInt(),toChar()사용하면 아스키 코드값으로 바뀌므로 유의해야함

=>단 toString은 그대로 바뀜

2)값: '0'의 아스키코드값은 48, 'a'의 아스키 코드값은 97

 

@알고리즘 풀며 느낀점

-문자열 수정이 잦은 경우 StringBuilder를 활용해 실행시간을 단축해야겠다.

-예시에서는 정렬된 제시값이 나와있다고 실제로 정렬된 값만 주어지는 것이 아니라는 것을 유의해야겠다.

 

 

 

 

>코틀린 문법

 

클래스 종류

 

1. 데이터 클래스

 

1)선언: 앞에 data를 붙여 선언

 

2)예시

data class DC(val a:String){
	lateinit var b: String
    constructor(a:String, b:String):this(a){
    	this.b=b
    }
}

 

3)비교:

-.equals()  로 비교

-단, 주생성자의 변수 멤버만 보고 동일 여부를 판별함

-예시

val obj1=DC("A","B")
val obj2=DC("A","C")

println(${obj1.equals(obj2)}) //true
//주생성자 변수 멤버는 "A"부분만 해당되므로 두 오브젝트는 같다

 

4)toString()

-데이터 타입이 아닌 클래스와는 달리 데이터 클래스의 경우 toString()을 붙이면 멤버 변수 데이터 출력 가능

-예시: data.toString()

 

 

2. 오브젝트 클래스

 

1)목적: 익명(anonymous)클래스 생성을 위해 존재

2)사용법

-클래스 이름이 없으므로 선언과 동시에 생성해야함

-object 키워드 사용

-예시

val obj= object{
	var data = 10
    fun some(){
    	println("data : $data")
    }
}

//이 경우엔 obj가 타입명시를 안해서 Any타입으로 선언됨. 
//즉 멤버인 data나 some에 접근하려할 시 "오류"

=>다른 클래스나 인터페이스를 타입으로 선언하여 하위클래스나 인터페이스를 구현한 클래스로 선언가능

open class Super{
	open var data=10
    open fun some(){
    	println("i am super some(): $data")
    }
}

val obj = object: Super(){
	override var data = 20
    override fun some(){
    	println("i am object some(): $data")
    }
}

fun main(){
	obj.data=30 //성공
    obj.some() //성공
}

 

 

3. 컴페니언 클래스

 

1)특징

-객체 생성없이 클래스 이름으로 멤버 접근 가능

-객체 생성해도 객체로는 멤버 접근 불가능

-companion object 키워드 사용

 

2)예시

class cL{
    companion object{
        var data=20
    }
    var o=10
}

fun main() {
    val obj=cL()
    
    obj.o=10 //성공
    cL.o=10 //오류
    println(obj.data)//오류
    println(cL.data) //성공
}

=>companion object 중괄호 내의 멤버는 클래스 명으로만, 그 외는 생성된 객체로만 접근가능