-
-
Save Junee01/dfbd6bf9de3a58f6fe75f7eb9a24da2b to your computer and use it in GitHub Desktop.
#Car ํด๋์ค๋ ์ฃผ์ฐจํ๋ฌ์จ ์ฐจ๋ฅผ ์๋ฏธํฉ๋๋ค. | |
class Car | |
attr_reader :plateNumber | |
#์ฐจ๋ ๋ฑ๋ก ๋ฒํธ๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ์ฐจ๋ ๋ฒํธ๋ ์ฐ์ String ํํ๋ก ๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. | |
def initialize plateNumber | |
@plateNumber = plateNumber #์ฐจ๋ ๋ฑ๋ก๋ฒํธ | |
end | |
end |
#Lot ํด๋์ค๋ ๊ฐ ์ฃผ์ฐจ๊ณต๊ฐ์ ์๋ฏธํฉ๋๋ค. | |
class Lot | |
attr_reader :spaceNumber, :available, :parkedCarNumber | |
#์ฃผ์ฐจ ๊ณต๊ฐ ํ๋ํ๋์ ๋ํ ์ด๊ธฐํ์ ๋๋ค. | |
def initialize spaceNumber | |
@spaceNumber = spaceNumber #์ฃผ์ฐจ ๊ณต๊ฐ์ ๋ฒํธ | |
@available = true #๋น์ด์๋์ง ์ฌ๋ถ | |
@parkedCarNumber = "" #์ฃผ์ฐจ๋ ์ฐจ๋์ ๋ฒํธ | |
end | |
#parkinglot ๋ถ๋ถ์์ ์ฌ์ฉ๊ฐ๋ฅํ ๊ณต๊ฐ์ด ์๋์ง, ์ฃผ์ฐจ๋ ์ฐจ์ ์ผ์นํ๋ ๊ฒ์ด ์๋์ง๋ฅผ ํ์ธํ์ฌ ๊ฑธ๋ฌ๋ด๋ฏ๋ก ์ฌ๊ธฐ์๋ ์ฃผ์ฐจ์ ๋ฐํ๋ง ๋ด๋นํฉ๋๋ค. | |
#๊ณต๊ฐ์ด ์๋ค๋ฉด ์ฐจ๋ฅผ ์ฃผ์ฐจ๋ฅผ ์๋ฃํฉ๋๋ค. | |
def park car | |
@available = false | |
@parkedCarNumber = car.plateNumber | |
print car.plateNumber.to_s + "์ฐจ๋์" + self.spaceNumber.to_s + "์ ์ฃผ์ฐจํ์ต๋๋ค.\n" | |
end | |
#์์ฒญํ ๋ฒํธํ ์ฃผ์ฐจ๋ ์ฐจ ๋ฒํธ๋ฅผ ๋น๊ตํ๊ณ ๋ฒํธ๊ฐ ์ผ์นํ๋ค๋ฉด ์ฐจ๋ฅผ ๋บ๋๋ค. | |
def pull plateNumber | |
print @parkedCarNumber + "์ฐจ๋์ ์ฑ๊ณต์ ์ผ๋ก ์ฐจ๋ฅผ ๋บ์ต๋๋ค.\n" | |
@available = true | |
@parkedCarNumber = "" | |
end | |
end |
#Parkinglot Class๋ ์ฃผ์ฐจ์ฅ์ ์๋ฏธํฉ๋๋ค. | |
class ParkingLot | |
attr_reader :lots | |
#์ฃผ์ฐจ์ฅ์ ์ด๊ธฐํํฉ๋๋ค. 'capacity'๊ฐ์ Lots๋ฅผ ์์ฑํฉ๋๋ค. | |
def initialize capacity | |
@lots = capacity.times.map { |i| Lot.new(i) } | |
print capacity.to_s + "๊ฐ์ ๊ณต๊ฐ์ ๊ฐ์ง ์ฃผ์ฐจ์ฅ์ด ๋ง๋ค์ด์ก์ต๋๋ค.\n" | |
end | |
#์ฃผ์ฐจ ์์ฒญ์ ํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋์ ๋๋ค. | |
def storeCar car | |
spaceAvailable = getAvailableSpace | |
if spaceAvailable != false | |
spaceAvailable.park(car) | |
else | |
print "๊ณต๊ฐ์ด ๋ถ์กฑํ์ฌ ์ฃผ์ฐจํ ์ ์์ต๋๋ค.\n" | |
return false | |
end | |
end | |
#์ฐจ ๋ฐํ ์์ฒญ์ ํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋์ ๋๋ค. | |
def getCar plateNumber | |
spaceOfCar = findCar(plateNumber) | |
if spaceOfCar != false | |
spaceOfCar.pull(plateNumber) | |
else | |
return false | |
end | |
end | |
#์ฃผ์ฐจ์ฅ์ ์ฌ์ฉ๊ฐ๋ฅํ ๊ณต๊ฐ์ด ์๋์ง๋ฅผ ํ์ธํ๋ ๋ฉ์๋์ ๋๋ค. | |
#์ฌ์ฉ๊ฐ๋ฅํ ๊ณต๊ฐ์ ๋ฐํํ๊ณ ๊ฒ์์ ์ข ๋ฃํฉ๋๋ค. | |
def getAvailableSpace | |
@lots.each do |lot| | |
if lot.available == true | |
return lot | |
end | |
end | |
return false | |
end | |
#์ฃผ์ฐจ๋์ด์๋ ์ฐจ ์ค ํด๋น ๋ฒํธ์ ์ฐจ๊ฐ ์ฃผ์ฐจ๋์ด ์๋์ง ํ์ธํ๋ ๋ฉ์๋์ ๋๋ค. | |
#์กด์ฌํ๋ค๋ฉด ํด๋น ์ฐจ๋์ ๊ณต๊ฐ์ ๋ฐํํ๊ณ ๊ฒ์์ ์ข ๋ฃํฉ๋๋ค. | |
def findCar plateNumber | |
@lots.each do |lot| | |
if lot.parkedCarNumber == plateNumber | |
return lot | |
end | |
end | |
print "๊ทธ๋ฌํ ๋ฒํธ์ ์ฐจ๋์ ์์ต๋๋ค.\n" | |
return false | |
end | |
end |
#์ฃผ์ฐจ ๊ณต๊ฐ์ ์ฒ์ ์ดํ๋ก ๋ณํํ์ง ์์ต๋๋ค. ๋ ์ฌ์ฉ๊ฐ๋ฅํ ์ํ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. | |
#์ฃผ์ฐจ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ ์ด๋ ํ ์ฐจ๋ผ๋ ๋ค์ด๊ฐ ์ ์์ ์ ๋๋ก ํ ๊ณต๊ฐ์ด ์ฌ์ ๋กญ์ต๋๋ค. ๋๋ฌธ์ ์ฐจ์ ์ข ๋ฅ๋ ํฌ๊ธฐ๋ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค. | |
#์ฃผ์ฐจ ๊ฐ๊ฒฉ ๋ฐ ์ด์ฉ์๊ฐ์ ๋ฌด๋ฃ/๋ฌด์ ํ์ ๋๋ค. ํ์ง๋ง ๋จผ์ ์ ์ ํ ์ฌ๋์ด ์ฃผ์ธ์ด ๋ฉ๋๋ค. ์ฐจ๋ฅผ ๋นผ๋ ์๊ฐ ๊ถํ์ด ์ฌ๋ผ์ง๋๋ค. | |
#์์ธ์ฒ๋ฆฌ๋ ๋ชจ๋ return fasle๋ก ํด๋์์ต๋๋ค. | |
#์ฃผ์ฐจ ๊ณต๊ฐ์ 0๋ถํฐ ์์๋๋ก ๊ฐ๊น์ด ๊ณณ์ ์๋ค๊ณ ๊ฐ์ ํ๊ณ , ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ๋ถํฐ ์ฐจ๋ก์ฐจ๋ก ์ฑ์ ๋ฃ๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. | |
require_relative('../ChattingCat_Assignment/car') | |
require_relative('../ChattingCat_Assignment/lot') | |
require_relative('../ChattingCat_Assignment/parkinglot') | |
ChattingCatPark = ParkingLot.new(5) #์ฃผ์ฐจ ๊ณต๊ฐ์ ํ๋ ๋ง๋ค๊ฒ ์ต๋๋ค. ์ฃผ์ฐจ ๊ณต๊ฐ์ 5๊ฐ๊ฐ ์์ต๋๋ค. | |
Cars = Array.new | |
10.times do |i| | |
Cars << Car.new("Car " + i.to_s) #์๋์ฐจ๋ฅผ "Car 0" ~ "Car 9"๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฑํฉ๋๋ค. | |
end | |
print "10๊ฐ์ ์ฐจ๊ฐ ๋ง๋ค์ด์ก์ต๋๋ค.\n" | |
#10๊ฐ์ ์๋์ฐจ๋ฅผ 5๊ฐ์ ๊ณต๊ฐ์ ์ฐจ๋ก์ฐจ๋ก ์ฃผ์ฐจํด๋ณด๊ฒ ์ต๋๋ค. | |
#์์๋๋ก๋ผ๋ฉด, ์์ 5๊ฐ๋ ์ฑ๊ณต ๋ค์ 5๊ฐ๋ ์คํจ์ ๋๋ค. | |
Cars.each do |car| | |
ChattingCatPark.storeCar(car) | |
end | |
#์ฐจ Car 0, Car 3์ ํด๋นํ๋ ์ฐจ๋ฅผ ๋นผ๊ฒ ์ต๋๋ค. | |
#๋ํ Car 000๋ผ๋ ๊ฑธ ๋นผ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฐ ์ฐจ๋ ์ฃผ์ฐจ๋์ด ์์ง ์๊ธฐ๋๋ฌธ์ ์คํจ์ ๋๋ค. | |
ChattingCatPark.getCar("Car 0") | |
ChattingCatPark.getCar("Car 3") | |
#์ฃผ์ฐจ ๊ณต๊ฐ์ด 2๊ฐ๊ฐ ๋์๊ธฐ ๋๋ฌธ์ ๋ค์ ์ค 2๊ฐ๊ฐ ์ฑ๊ณตํฉ๋๋ค. | |
ChattingCatPark.storeCar(Cars[5]) #๊ฐ๊ฐ 0 | |
ChattingCatPark.storeCar(Cars[6]) #3์ด ์ฃผ์ฐจ๋์ด์๋ ๊ณต๊ฐ์ ์ฃผ์ฐจ๋ฉ๋๋ค. | |
ChattingCatPark.getCar("Car 000") #ํด๋น ์ฐจ ๋ฒํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ค๊ณ ํฉ๋๋ค. |
์ฐ์ ๊ทํ ์๊ฐ๋ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์์ดํ๋ฆด๋. ์ผ๋น๋. ๋ฉด์ ์ ์ฐธ ์ฌ๋ฏธ์์์ต๋๋ค.
์ด์ ๊ธฐํ๋ด๋ก ๋๋ด๊ฒ ๋ค๊ณ ํ๊ณ , ๊ทธ ๋ ๋ง๋ฌด๋ฆฌ๋ฅผ ์ง๊ณ ์ง์ ๊ฐ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ผ๋น๋์ด ์๊ฐํ์๋ ๋งํผ์ ์ฃผ์ฐจ์ฅ์ธ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํจํด, ๋ฆฌํฉํ ๋ง ๊ทธ๋ฆฌ๊ณ ๋ฃจ๋น์ ํน์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ์๋ฅผ ์ค์ด๊ณ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
ํ์ง๋ง ์ฐ์ ์ ์์ ์ฝ๋๊ฐ ์ ๊ฐ ์๊ฐํ๋ ์ต์ํ์ ์ฃผ์ฐจ์ฅ์ ๋๋ค. ์ํฉ์ ๋ฐ๋ผ ์ฌ์ฉ์, ์๊ธ ๋ฑ์ด ์ถ๊ฐ ๋ ์ ์์ง๋ง ์ฐ์ ์ ์ ์ธํ๊ณ ์ฃผ์ฐจ์ ์ฐจ ๋นผ๊ธฐ์ ์ด์ ์ ๋๊ณ ๊ตฌํํ์์ต๋๋ค.
'๋ด ๊ฒ์ผ๋ก ๋ง๋ค ์ ์๋ ์ฌ๋' ์ด๋ผ๋ ๋ง์ ๊ณต๊ฐ์ ๋ง์ด ํ์ต๋๋ค. ์ง๊ธ๊น์ง๋ ๋นจ๋ฆฌ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์ด์ ํฌํธํด๋ฆฌ์ค์ ์ฌ๋ฆฌ๊ณ ๋ค๋ฅธ ๊ฑธ ๋ง๋๋ ๋ฐ์ ์ด์ ์ ๋์๋๋ฐ, ๋ ์ผ์ฆ ํํ ๋ฆฌ์ผ๋ ์์ง 100% ์ดํดํ์ง ๋ชปํ๊ณ ์์ ์ ํด์๊ทธ๋ฐ์ง ๊ธฐ์ด์ ์ธ ์ง๋ฌธ์ ๋ง์กฑ์ค๋ฝ๊ฒ ๋๋ตํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฃจ๋น ๊ธฐ์ด ๋ฌธ๋ฒ๋ถํฐ ๋ค์ ์์ํ๋ฉด์ ์๊ฐ์ ๋ฐ๋ก ๊ตฌํํ ์ ์๋๋ก ์ฐ์ต ํด์ผ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ๋ก ํ ์คํธ๋ ๋๋ ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผํ๋ฉด์ด ๋์ต๋๋ค.
5๊ฐ์ ๊ณต๊ฐ์ ๊ฐ์ง ์ฃผ์ฐจ์ฅ์ด ๋ง๋ค์ด์ก์ต๋๋ค.
10๊ฐ์ ์ฐจ๊ฐ ๋ง๋ค์ด์ก์ต๋๋ค.
Car 0์ฐจ๋์0์ ์ฃผ์ฐจํ์ต๋๋ค.
Car 1์ฐจ๋์1์ ์ฃผ์ฐจํ์ต๋๋ค.
Car 2์ฐจ๋์2์ ์ฃผ์ฐจํ์ต๋๋ค.
Car 3์ฐจ๋์3์ ์ฃผ์ฐจํ์ต๋๋ค.
Car 4์ฐจ๋์4์ ์ฃผ์ฐจํ์ต๋๋ค.
๊ณต๊ฐ์ด ๋ถ์กฑํ์ฌ ์ฃผ์ฐจํ ์ ์์ต๋๋ค.
๊ณต๊ฐ์ด ๋ถ์กฑํ์ฌ ์ฃผ์ฐจํ ์ ์์ต๋๋ค.
๊ณต๊ฐ์ด ๋ถ์กฑํ์ฌ ์ฃผ์ฐจํ ์ ์์ต๋๋ค.
๊ณต๊ฐ์ด ๋ถ์กฑํ์ฌ ์ฃผ์ฐจํ ์ ์์ต๋๋ค.
๊ณต๊ฐ์ด ๋ถ์กฑํ์ฌ ์ฃผ์ฐจํ ์ ์์ต๋๋ค.
Car 0์ฐจ๋์ ์ฑ๊ณต์ ์ผ๋ก ์ฐจ๋ฅผ ๋บ์ต๋๋ค.
Car 3์ฐจ๋์ ์ฑ๊ณต์ ์ผ๋ก ์ฐจ๋ฅผ ๋บ์ต๋๋ค.
Car 5์ฐจ๋์0์ ์ฃผ์ฐจํ์ต๋๋ค.
Car 6์ฐจ๋์3์ ์ฃผ์ฐจํ์ต๋๋ค.
๊ทธ๋ฌํ ๋ฒํธ์ ์ฐจ๋์ ์์ต๋๋ค.