관리 메뉴

이리메라 갖다가

[Swift] 호텔 객실 예약 프로그래밍(1) : Array, sorted(), 랜덤값 추출 본문

TIL

[Swift] 호텔 객실 예약 프로그래밍(1) : Array, sorted(), 랜덤값 추출

너이르나 2023. 7. 20. 21:54
728x90
반응형
1. 배열 sorted

일반적으로 배열, 딕셔너리는 값을 저장하고 print 할 때 무작위로 나온다.

let roomSpec = ["1번방" : 10000, "2번방" : 20000, "3번방" : 30000, "4번방" : 40000, "5번방" : 50000]

for (roomNumber, price) in roomSpec {
    print("\(roomNumber) : \(price)원")
}

딕셔너리 특징상 value 값은 동일할 수 있으니, key 값을 기준으로 정렬을 해준다.

현재 key 값이 String 형태인데 Int 형으로 바꾸어 좀 더 쉽게 정렬하는 코드를 만들 수 있다.

(String 형으로 정렬하는 코드로 작업했는데, 계속 적용이 안되고 에러가 나서 포기함 ㅠ)

 

수정된 코드

let roomSpec = [1 : 10000, 2 : 20000, 3 : 30000, 4 : 40000, 5 : 50000]
let sortedRoomSpec = roomSpec.keys.sorted()

for roomNumber in sortedRoomSpec {
    if let price = roomSpec[roomNumber] {
        print("\(roomNumber)번방 : \(price)원")
    }
}

roomSpec 딕셔너리는 [Int:Int] 형태이므로, <딕셔너리>.keys.sorted() 코드를 이용하여 정렬하였다.

 

2. 랜덤값 추출(+ 조건)

100,000 ~ 500,000 사이 랜덤한 숫자를 추출해서 지갑에 넣어주는 코드를 짜는데, 1만원 단위로 지급을 해야하는 조건이 존재한다.

일단 랜덤 숫자를 뽑는 코드는 간단하다.

Int.random(in: 범위)

뽑는 숫자는 원단위로 Int 형으로 추출하였고,

해당 범위 안에서 조건식을 넣는 방법을 못찾아서 나는 10~50 사이의 값을 추출해서 10,000을 곱했다.

 

print("<랜덤 금액 받기>")
let money = Int.random(in: 10...50)
myWallet += (money * 10000)
print("랜덤 지급 금액 : \(money*10000)원")
print("현재 나의 잔고 : \(myWallet)원")

그리고 랜덤하게 뽑은 금액은 내 잔고에 지급되므로 랜덤 금액 받기를 누를때마다 누적되도록 작성했다.

 

3. 개선사항
3-1. 계산기
  • 등호를 누르기 전, 두번째 연산자를 눌렀을 때 앞선 계산이 디스플레이에 보여져야 함
  • 연산자의 우선순위를 따져, 곱셈과 나눗셈 연산자를 누를 경우 앞선 계산보다 먼저 수행되어야 함
3-2. 객실 예약 프로그램
  • 번호 입력 후 다시 동일한 번호를 누르거나 그보다 앞선 번호를 입력하면 else 값이 나옴
  • 번호 선택 이전으로 돌아가는 기능 구현
  • 날짜 입력 형태 검증(YYYY-MM-DD)
  • 예약 날짜 저장(체크인, 체크아웃 나눠서 저장)
  • 방 개수를 한정하여, 예약이 꽉 찼을 시 예약이 불가능하다 또는 객실 정보를 불러오지 않기
728x90
반응형