티스토리 뷰
코드카타
멀리 뛰기
문제
n개의 칸이 주어졌을 때 끝에 도달할 수 있는 경우의 수 구하기
점화식 찾기
n = 0 | 0
n = 1 | (1) -> 1
n = 2 | (1, 1) (2) -> 2
n = 3 | (1, 1, 1), (1, 2), (2, 1) -> 3
n = 4 | (1, 1, 1, 1), (1, 1, 2), (1, 2, 1), (2, 1, 1), (2, 2) -> 5
n >= 3 일 때, 점화식은 f(n) = f(n − 1) + f(n − 2)에 해당한다.
해당 점화식은 피보나치 수열에 해당한다.
풀이
class Solution {
fun solution(n: Int): Int {
// n이 0 ~ 2일 때의 초기 반환값 설정
var arr = mutableListOf(0, 1, 2)
// n이 3이상일 때 피보나치 수열을 리스트에 더한다.
(3..n).forEach { arr.add((arr[it - 1] + arr[it - 2]) % 1234567) }
return arr[n]
}
}
메모이제이션 방식으로 피보나치 수열을 만들고
해당 피보나치 수열의 n번째 값을 반환한다.
n이 3미만의 값이면 해당 for문을 실행시키지 않는다.
키오스크 구현하기
Lv 4
구현 사항
- 메뉴판 번호는 숫자기에 숫자를 입력해야 하는데 문자를 입력했을 때,
메뉴판에 없는 숫자를 입력했을 때, 다시 입력할 수 있도록 예외처리를 진행한다.
- 현재 잔액과 가격을 비교해서 구매 가능한 상태를 클래스에 추가적으로 구현한다.
유저 클래스 구현
class User(var money: Int) {
fun purchase(food: Food) {
if (money >= food.price) {
money -= food.price
println("${food.name} 구매, 잔액: ${money}원")
} else {
println("잔액 부족, 현재 잔액: ${money}원")
}
}
}
잔액을 프로퍼티로 갖는 유저 클래스를 구현한다.
purchase 메소드는 구매한 음식(Food 클래스)를 인자로 받아
유저의 잔액에 따라 다른 메시지를 출력한다.
예외처리 진행
fun main() {
val user = User(10000)
while (true) {
showMainMenu()
try {
val menuNum = readln().toInt()
if (menuNum == 0){
print("\n프로그램을 종료합니다.")
break
}
println()
while (true) {
val foodMenu = Menu.menuItems[menuNum - 1]
chooseFood(foodMenu)
try {
val foodNum = readln().toInt()
if (foodNum == 0) {
println()
break
}
val food = foodMenu.items[foodNum-1]
user.purchase(food)
println()
}catch (e:ArrayIndexOutOfBoundsException){
printErrorMessage1()
} catch (e: NumberFormatException){
printErrorMessage2()
}
}
} catch (e:ArrayIndexOutOfBoundsException){
printErrorMessage1()
} catch (e: NumberFormatException){
printErrorMessage2()
}
}
}
메뉴를 선택하기 위해 번호를 입력할 때마다 두 개의 예외처리를 진행한다.
메뉴에 없는 번호를 입력했을 때(리스트에 없는 번지 수를 탐색하려 할 때)와
문자를 입력했을 때(숫자 말고 다른 것을 입력했을 때)의 예외처리를 진행했다.
실행 결과
기존 로직에서 주문한 음식을 계산하는 로직이 추가되었다.
'내일배움캠프 > Android 국비지원' 카테고리의 다른 글
TIL 21일차 (괄호 회전하기 - Kotlin) (1) | 2024.06.16 |
---|---|
TIL 20일차 (귤 고르기 - Kotlin) (0) | 2024.06.15 |
TIL 18일차 (N개의 최소공배수 - Kotlin | 키오스크 Lv1 ~ Lv3 구현) (0) | 2024.06.13 |
TIL 17일차 (예상 대진표 - Kotlin | 코틀린 심화문법 정리 2) (0) | 2024.06.12 |
TIL 16일차 (카펫 - Kotlin | 코틀린 심화 문법 정리 1) (0) | 2024.06.11 |