특별한 기능이나 형태의 클래스 Data Class 데이터를 다루는데 최적화된 class로 '5가지'기능을 내부적으로 자동으로 생성해준다 내용의 동일성을 판단하는 equals()의 자동 구현 객체의 내용에서 고유한 코드를 생성하는 hashcode()의 자동구현 포함된 속성을 보기쉽게 나타내는 toString()의 자동구현 객체를 복사하여 똑같은 내용의 새 객채를 만드는 copy()의 자동 구현 아무 패러미터가 없으면 똑같은 내용으로 생성 val a = Data("A",7) val b = a.copy() 패러미터가 있다면 해당 패러티머를 교체하여 생성 val a = Data("A",7) val b = a.copy("B") b ->Data("B",7) 로 생성 속성을 순서대로 반환하는 componenetX(..
문제 이해 정수 저장 arr 에서 가장 작은 수 제거한 배열 Return 빈 배열일 경우(1~0) -> -1 채워 Return 접근 size 체크 -> -1 반환 filter 사용해서 min 값 걸러내기 풀이 class Solution { fun solution(arr: IntArray): IntArray = if (arr.size == 1) intArrayOf(-1) else arr.filter { it != arr.min() }.toIntArray() }
문제 이해 양의 정수 n 이 임이의 수의 제곱인지 판단 제곱 -> x+1의 제곱 제곱X -> -1 접근 sqrt 사용, 형식 맞추기 제곱근 확인 후 Return 풀이 class Solution { fun solution(n: Long): Long { val a = sqrt(n.toDouble()).toLong() return if (a * a == n) (a + 1)*(a + 1) else -1 } } 다른사람의 풀이 class Solution { fun solution(n: Long): Long { val sqrt = sqrt(n.toDouble()) return if(sqrt % 1.0 == 0.0) { (sqrt + 1).pow(2.0).toLong() } else { -1L } } }
클래스 안에서 클래스가 중첩되는 두가지 유형 중첩 클래스(Nested Class) class Outer { class Nested { } } 하나의 클래스가 다른 클래스의 기능과 강하게 연관 되어 있다는 의미를 전달하기 위해 만들어진 형식으로 사용할 때는 Outer.Nested()와 같이 사용 외부 클래스의 내용을 공유 할 수 없음(별개) 내부 클래스(Inner class) class Outer { inner class Inner { } } 혼자서 객채를 만들 수는 없고 외부 클래스의 객체가 있어야지 생성과 사용이 가능한 클래스를 말함 외부 클래스의 속성과 함수의 사용이 가능 예제 fun main() { Outer.Nested().introduce() val outer = Outer() val inner..
코틀린도 함수의 overloading 지원됨 : 같은 Scope 안에서 같은 이름의 함수를 여러개 만들 수 있는 것 ex) fun same (x: Int) fun same (x: Int, text: String) fun same (x: Int, y: Int) 다만 패러미터 이름만 같은 경우는 오버로딩 할 수 없다. overloading 예시 패러미터의 형식에 맞게 자동으로 함수가 매칭되는 것을 확인 할 수 있다 fun main() { read(7) read("감사합니다") } fun read(x: Int) { println("숫자 $x 입니다") } fun read(x: String) { println(x) } 디폴트 매개 변수 (default arguments) 별다른 패러미터가 없을떄도 기본값으로 동..
문제 이해 자연수 n 뒤집어 각 자리 수 원소를 가지는 배열로 Return 접근 수의 나열 -> Map 기존의 배열에 넣어주기 뒤집기 풀이 class Solution { fun solution(n: Long): IntArray { var answer = intArrayOf() n.toString().map { answer += (it.toInt() - '0'.toInt()) } return answer.reversedArray() } } 다른사람의 풀이 class Solution { fun solution(n: Long): IntArray = n.toString().reversed().map { it.toString().toInt() }.toIntArray() }
문제 이해 자연수 N의 각 자릿수의 합 Return 접근 수의 나열 -> 문자열 List 변환 map으로 숫자의 값을 아스키 코드 값으로 치환 - 48 (0의 아스키 코드) sum 풀이 class Solution { fun solution(n: Int): Int = n.toString().map { it.toInt() - '0'.toInt() }.sum() } 다른사람의 풀이 class Solution { fun solution(n: Int): Int { var input = n var answer = 0 while (input != 0) { answer += input % 10 input /= 10 } return answer } }
nullable 변수에서 null을 처리하는 법 nullable 변수 var sample: String? = null But null상태로 속성이나 함수를 쓰려고 하면 -> null pointer exception 발생 (null 인 객체를 참조하면 발생하는 오류) var sample: String? = null if (sample != null) println(sample.toUpperCase()) 위와 같은 null Check 필요 ?. null safe operator sample?.toUpperCase() 참조연산자를 실행하기 전에 먼저 객체가 null 인지 확인부터 하고 객체가 null이라면 뒤의 구문을 실행하지 않는 연산자 이다. ?: elvis operator sample?:"default"..
코틀린에서는 기본적으로 " "사이에 문자열이 들어있으면 String 객체 생성 됨 이 String 클래스에 관련된 여러 속성과 함수 존재 문자열을 다루는 함수 var test1 = "Test.Kotlin.String" println(test1.length) println(test1.toUpperCase()) println(test1.toLowerCase()) //문자열 나누기 -> List val test2 = test1.split(".") println(test2) //문자열 합치기 println(test2.joinToString()) println(test2.joinToString("-")) //시작과 끝 설 println(test1.substring(5..10)) Boolean값 Return하는 함..
문제 이해 문자열 s 한개 이상의 단어 공백 문자로 구분 짝수 -> 대문자 홀수 -> 소문자 문자 전체의 짝/홀 X 단어 별로 짝/홀 첫번째 글자 짝수 처리 접근 split : 공백 기준으로 나눈 리스트 반환 joinToString : 사이에 공백을 다시 붙여줌 word.mapIndexed 사이의 단어를 처리해서 반환함 짝수 -> 대문자 홀수 -> 소문자 다시 단어를 붙여주기 joinToString 풀이 class Solution { fun solution(s: String) = s.split(" ").joinToString(" ") { word -> word .mapIndexed{ index, char -> if ( index % 2 == 0) char.toUpperCase() else char.toL..
문제 이해 정수 n의 약수의 합 Return 접근 전체 for 돌리기 나눠서 0 되는 집합의 합 풀이(나의 풀이) class Solution { fun solution(n: Int): Int { var answer = 0 for (i in 1..n) { if (n % i == 0) { answer += i } } return answer } } 풀이(다른 사람의 풀이) class Solution { fun solution(n: Int): Int { var answer = 0 answer = (1..n).filter { n % it == 0 }.sum() return answer } }
문제 이해 문자를 n 만큼 밀어서 return 소문자 대문자 접근 입력값 리스트화 대문자의 경우 밀어주기 소문자의 경우 밀어주기 풀이 class Solution { fun solution(s: String, n: Int): String { return s.toList().joinToString(separator = "") { when (it) { in 'A'..'Z' -> ('A'.toInt() + (it.toInt() - 'A'.toInt() + n) % ('Z' - 'A' + 1)).toChar() in 'a'..'z' -> ('a'.toInt() + (it.toInt() - 'a'.toInt() + n) % ('z' - 'a' + 1)).toChar() else -> it }.toString() }..