카펫
brown이 yellow를 감싸고 있는 그림의 조건을 구해 그림의 가로와 세로의 길이를 구해 반환한다.
(w + h) * 2 - 4 == brown까지는 구했는데 시간내에 풀지못해 다른 풀이를 참고했다.
w * h = S = brown + yellow
brown + yellow
가 h로 나누어지는 수 여야함(약수)(h - 2) * (w - 2)
class Solution {
fun solution(brown: Int, yellow: Int): IntArray {
var answer = intArrayOf()
for(h in 3..(brown+yellow)){
if((brown + yellow) % h == 0){
val w = (brown + yellow) / h
if((h - 2) * (w - 2) == yellow){
return intArrayOf(w, h)
}
}
}
return answer
}
}
다른코드
class Solution {
fun solution(brown: Int, red: Int): IntArray {
return (1..red)
.filter { red % it == 0 }
.first { brown == (red / it * 2) + (it * 2) + 4 }
.let { intArrayOf(red / it + 2, it + 2) }
}
}
프로젝트 - 최상단개념으로 모듈, 패키지, 클래스
를 포함한다
모듈 - 프로젝트 아래의 개념 패키지, 클래스
를 포함한다.
패키지 - 모듈 아래 개념으로 클래스
를 포함한다. (diractory)
public
: 어디서나 접근 (기본적으로 public)private
: 동일한 클래스 내부에서만 접근internal
: 같은 모듈 내부에서만 접근protected
: 기본적으로 private이지만 상속을 받은 경우 타 모듈에서 접근 가능필요성
- 데이터에 무분별한 접근을 막는다.
- 클래스간 접근하면 안되는 상황을 구분해 유지보수에 용이해짐
오류
라고 함예외
발생Try-Catch
로 예외를 처리Try-Catch
fun method1() {
try {
예외가 발생할 가능성이 존재하는 코드
}
catch(예외종류) {
예외가 발생했을때 처리할 코드
}
}
Try-Catch-Finally
try {
println("나눗셈 결과: $result")
} catch (e: ArithmeticException) {
println("나눗셈 오류 발생: ${e.message}")
} finally {
println("나눗셈 연산 완료")
}
finally는 예외처리에 관계없이 항상 실행되는 코드
Throw
fun method1(num1:Int) { if(num1 > 10) { throw 예외종류 } }
lateinit
, 상수(val)는 lazy
를 이용해 지연초기화 lateinit var name: String
lateinit var name:String
fun displayInfo() {
if(this::name.isInitialized) {
println("이름은: ${name} 입니다.")
} else {
println("name변수를 초기화해주세요.")
}
}
지연초기화를 사용한 변수가 초기화 되지 않았는데 해당 변수를 사용하면 오류가 발생한다. 그래서
this::name.isInitialized
를 이용해 초기화되었는지 체크해 초기화 되었다면 사용되도록 할 수 있다.
val address: String by lazy { println("address 초기화") "seoul" }
lazy
는 변경이 불가능한 값을 지연초기화 하는 것이기 때문에 초기화 값 없이는lazy
를 사용할 수 없다
?
!!
?.
?:
!!
사용은 최대한 지양
?
: null을 저장할 수 있음
!!
: null이 아님을 보장
?.
: null일수도있을때 null이 아닐때만 참조하는 메소드를 실행 (null이면 null이 반환됨)
?:
: null일때 원하는 출력을 설정해주려 할 때 사용한다.
println("주소의 길이는: ${address?.length ?: "초기화하세요"} 입니다")
//address가 null이면 "초기화하세요"를 출력하도록 설정