Skip to content

Commit

Permalink
Merge pull request #173 from AlgoLeadMe/16-jung0115
Browse files Browse the repository at this point in the history
16-jung0115
  • Loading branch information
jung0115 authored Nov 21, 2024
2 parents 71a14bd + fec78c0 commit 82a3469
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 1 deletion.
3 changes: 2 additions & 1 deletion jung0115/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
| 12차시 | 2024.09.07.토 | 다이나믹 프로그래밍 | [개근상(1563)](https://www.acmicpc.net/problem/1563) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/157 |
| 13차시 | 2024.09.23.월 | 다이나믹 프로그래밍 | [사전(1256)](https://www.acmicpc.net/problem/1256) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/162 |
| 14차시 | 2024.09.25.수 | 그리디 알고리즘 | [컵라면(1781)](https://www.acmicpc.net/problem/1781) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/165 |
| 15차시 | 2024.09.28.토 | 이분 탐색 | [가장 긴 증가하는 부분 수열 2(12015)](https://www.acmicpc.net/problem/12015) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/169 |
| 15차시 | 2024.09.28.토 | 이분 탐색 | [가장 긴 증가하는 부분 수열 2(12015)](https://www.acmicpc.net/problem/12015) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/169 |
| 16차시 | 2024.10.05.토 | 시뮬레이션 | [주차 요금 계산(Lv.2)](https://school.programmers.co.kr/learn/courses/30/lessons/92341) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/173 |
71 changes: 71 additions & 0 deletions jung0115/시뮬레이션/Programmers_92341.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// 16차시 2024.10.05.토 : 프로그래머스 - 주차 요금 계산(Lv.2)
import java.util.HashMap

data class Record (
val time: Int,
val carNum: Int,
val isIn: Boolean
)

class Solution {
fun solution(fees: IntArray, records: Array<String>): IntArray {
val sortRecords: MutableList<Record> = mutableListOf()

// 주어진 기록을 파싱해서 Record 리스트로 변환
for(record: String in records) {
val current = record.split(" ")

val timeSplit = current[0].split(":")
val time: Int = timeSplit[0].toInt() * 60 + timeSplit[1].toInt()
val carNum: Int = current[1].toInt()
val isIn: Boolean = current[2] == "IN"

sortRecords.add(Record(time, carNum, isIn))
}

// 입차 중인 차량들의 입차 시간을 저장하는 맵
val inCars: HashMap<Int, Int> = HashMap()
// 자동차 번호별 총 주차 시간을 저장하는 맵
val parkingTimes: HashMap<Int, Int> = HashMap()

// 각 레코드를 처리
for(record: Record in sortRecords) {
if (record.isIn) {
// 입차 시 입차 시간을 기록
inCars[record.carNum] = record.time
} else {
// 출차 시 주차 시간을 계산하고 누적
val inTime: Int = inCars.remove(record.carNum) ?: 0
val parkingTime = record.time - inTime
parkingTimes[record.carNum] = parkingTimes.getOrDefault(record.carNum, 0) + parkingTime
}
}

// 출차하지 않은 차량은 23:59에 출차된 것으로 간주
val endTime = 23 * 60 + 59
for((carNum, inTime) in inCars) {
val parkingTime = endTime - inTime
parkingTimes[carNum] = parkingTimes.getOrDefault(carNum, 0) + parkingTime
}

// 자동차 번호 순으로 결과를 계산
val result: MutableList<Pair<Int, Int>> = mutableListOf()
for((carNum, parkingTime) in parkingTimes) {
var cost: Int = fees[1] // 기본 요금
val overTime = parkingTime - fees[0]

// 기본 시간을 넘은 경우 추가 요금을 계산
if (overTime > 0) {
cost += (overTime / fees[2]) * fees[3]
if (overTime % fees[2] > 0) {
cost += fees[3]
}
}

result.add(Pair(carNum, cost))
}

// 자동차 번호 순으로 정렬 후 요금만 반환
return result.sortedBy { it.first }.map { it.second }.toIntArray()
}
}

0 comments on commit 82a3469

Please sign in to comment.