μ€λμ λ μ¨κ° λ무 μ’μμ
μ°μ± μ μλ© νμ΅λλ€. κ½κ΅¬κ²½λ νκ³ ~..
κ·Έλλ λ¦κ² λλ§ λΆλ΄λΆλ΄ μ€ν°λ μΉ΄ν μμ΄μ.
1. νλ‘κ·Έλλ¨Έμ€ - λ λ°λ¨ΉκΈ°
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
- DP λ¬Έμ μμ΅λλ€. DPλ μμ μ νμ μ°Ύλκ² κ½€λ μκ°μ΄ 걸리λ€μ..
- μ²μμλ DFSλ BFSλ‘ νμ΄λ³΄λ €κ³ νλλ° νμ μ΅λ μκ° 10λ§μ΄λΌ, 무쑰건 μκ°μ΄κ³Ό..γ
- μ¬κ³ λ ₯(?)μ λ κΈΈλ¬μΌνλλ° λ¨κΈ°κ°μ λλκ² μλλΌ μ½μ§μλ€μ γ γ γ λΏμ₯
func solution(_ land:[[Int]]) -> Int{
// dp
var dp = land
for i in 1..<land.count {
for j in 0..<4 {
for k in 0..<4 {
if j == k { continue } // κ°μ μ΄μ 건λλ°κΈ°
// 5μ λ€κ° 2, 3, 5 λν κ² μ€ κ°μ₯ ν° κ°μ κ°±μ νκ² λ¨.
dp[i][j] = max(dp[i][j], dp[i-1][k] + land[i][j])
}
}
}
return dp.last!.max()!
}
λ€λ₯Ένμ΄μμ μλ νμ΄λ λ°κ²¬νλλ°μ !
λ± λ΄€μλ DP λ°λ³΅λ¬Έμ΄ μ΄ν΄ μλλ€λ©΄ μ΄ μ½λλ‘ νλμ© μ΄ν΄ν΄λ³Ό μ μμ κ² κ°μμ
λ€μ νμ 0λ²μ§Έ μ΄μλ μ΄μ νμ 1λ²μ§Έ , 2λ²μ§Έ, 3λ²μ§Έ μ΄μ κ°λ€ μ€μ
κ°μ₯ ν° κ°μ λν΄μ£Όλ©΄μ μ΅λκ°μ ꡬν΄μ£Όλ λ°©μμ λλ€ !
( 0λ²μ§Έ μ΄μ μ΄μ°¨νΌ κ°μ μ΄μ΄λΌ μ μΈλ¨. )
func solution(_ land:[[Int]]) -> Int{
var answer = 0
var land = land
for i in 0..<(land.count-1) {
land[i+1][0] += max(land[i][1], land[i][2], land[i][3])
land[i+1][1] += max(land[i][0], land[i][2], land[i][3])
land[i+1][2] += max(land[i][0], land[i][1], land[i][3])
land[i+1][3] += max(land[i][0], land[i][1], land[i][2])
}
guard let last = land.last else { return 0 }
return max(last[0],last[1], last[2], last[3])
}
2. νλ‘κ·Έλλ¨Έμ€ - μ€νμ±ν λ°©
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
- κΈ°μ‘΄ νμ΄
func νμλλ°μκ°μ΄κ³Όλλμ€νμ±ν
λ°©(_ record:[String]) -> [String] {
var NicknameDic: [String: String] = [:]
var chatState: [(id: String, nickname: String, state: String)] = []
for i in record {
let input = i.split(separator: " ").map { String($0) }
let (state, id) = (input[0], input[1])
switch state {
case "Enter":
let nickname = input[2]
if NicknameDic[id] != nil {
// κΈ°μ‘΄μ λλ€μμ΄ μλλ°, μ΄λ¦ λ°κΎΈκ³ λ€μ΄μ΄ λ°κΏμ€λ€.
NicknameDic[id] = nickname
chatState.indices.filter { chatState[$0].id == id }.forEach { chatState[$0].nickname = nickname }
} else {
// μμΌλ©΄ μΆκ°ν΄μ€λ€.
NicknameDic[id] = nickname
}
chatState.append((id: id, nickname: nickname, state: "λ€μ΄μμ΅λλ€"))
case "Leave":
let leaveName = NicknameDic[id]!
chatState.append((id: id, nickname: leaveName, state: "λκ°μ΅λλ€"))
case "Change":
let changeName = input[2]
NicknameDic[id]! = changeName
chatState.indices.filter { chatState[$0].id == id }.forEach { chatState[$0].nickname = changeName }
default:
break
}
}
var result: [String] = []
for i in chatState {
result.append("\(i.nickname)λμ΄ \(i.state).")
}
return result
}
- μ²μμλ μ±ν λ°© μνλ₯Ό λ°°μ΄λ‘ λ§λ€κ³ λλ€μμ΄ λ°λ λλ§λ€ λ°°μ΄μμ indices λ©μλλ₯Ό νΈμΆν΄μ idλ μΌμΉνλ μΈλ±μ€λ₯Ό μ°Ύκ³ ,
μ΄νμ κ°κ°μ μΈλ±μ€μ λν΄ λ°°μ΄ μμλ₯Ό μ λ°μ΄νΈ ν΄μ€¬λλ°μ.
- μ΄λ κ² νκ² λλκΉ μ΅λ O(n^2)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§κ² λμ΄ 4κ°μ λμ ν μΌμμ μκ°μ΄κ³Όκ° λλλΌκ΅¬μ.
- κ·Έλμ μ΄λ»κ² κ°μ μ ν΄λ³ΌκΉ κ³ λ―Όνλ€κ°, λμ λ리λ₯Ό μ°λ €κ³ νλλ° κ·Έλ¬λ©΄ μ±ν λ°© λ€μ΄μ¨ μμλ κΌ¬μ΄κ² λκ³ .. νμ©νλκ² λ³΅μ‘ν΄μ§ κ² κ°μμ λ°°μ΄μ μ΄μ©νλ©΄μ μ΅λν λ°°μ΄μ λ λ³κ²½νλ μμΌλ‘ κ°μ μ ν΄μΌκ² λ€κ³ μκ°νμ΅λλ€.
- κ³°κ³°ν μκ°ν΄λ³΄λ, κ°μ₯ λ§μ§λ§μ λ°λ λλ€μλ§ μλ©΄λλκΉ λλ€μμ΄ λ°λ λλ§λ€ κ΅³μ΄ μ λ°μ΄νΈλ₯Ό ν΄μ£Όμ§ μμλ λλλΌκ΅¬μ
- λλ€μ λμ λ리μλ§ κ³μν΄μ μ λ°μ΄νΈν΄μ£Όκ³ , μ±ν λ°© μνμ λν μ λ°μ΄νΈλ idλ‘ κ΅¬λΆν΄μ€¬μ΅λλ€. id 1λ²μ΄ λ€μ΄μμ΅λλ€, 2λ²μ΄ λ€μ΄μμ΅λλ€, 1λ²μ΄ λκ°μ΅λλ€.. μ΄λ°μμΌλ‘ ..!
- κ·Έλ¦¬κ³ λ§¨ λ§μ§λ§μ idλ λλ€μμ λ§€μΉν΄μ resultμ μ μ₯νμ΅λλ€ !
func μ€νμ±ν
λ°©μ½λκ°μ (_ record:[String]) -> [String] {
var NicknameDic: [String: String] = [:]
var chatState: [(id: String, state: String)] = []
for i in record {
let input = i.split(separator: " ").map { String($0) }
let (state, id) = (input[0], input[1])
switch state {
case "Enter":
let nickname = input[2]
if NicknameDic[id] != nil {
// κΈ°μ‘΄μ λλ€μμ΄ μλλ°, μ΄λ¦ λ°κΎΈκ³ λ€μ΄μ΄ λ°κΏμ€λ€.
NicknameDic[id] = nickname
} else {
// μμΌλ©΄ μΆκ°ν΄μ€λ€.
NicknameDic[id] = nickname
}
chatState.append((id: id, state: "λ€μ΄μμ΅λλ€"))
case "Leave":
let leaveName = NicknameDic[id]!
chatState.append((id: id, state: "λκ°μ΅λλ€"))
case "Change":
let changeName = input[2]
NicknameDic[id]! = changeName
default:
break
}
}
var result: [String] = []
for i in chatState.indices {
let id = chatState[i].id
result.append("\(NicknameDic[id]!)λμ΄ \(chatState[i].state).")
}
return result
}
λ€λ₯Έ μ¬λλ€ νμ΄λ₯Ό 보λ λ κ°κ²°νκ³ μ’μ μ½λλ€μ΄ λ§λλΌκ΅¬μ. κ·Έ μ€μμ νλλ₯Ό μ΄ν΄λ΄€μ΅λλ€.
func solution(_ record:[String]) -> [String] {
let actions = ["Enter":"λμ΄ λ€μ΄μμ΅λλ€.", "Leave":"λμ΄ λκ°μ΅λλ€."]
var a = [String:String]()
record.forEach {
let separated = $0.components(separatedBy: " ")
if separated.count > 2 {
a[separated[1]] = separated[2]
}
}
return record.filter { !$0.contains("Change") }.map { (value:String) -> String in
let separated = value.components(separatedBy: " ")
let newString = a[separated[1]]! + actions[separated[0]]!
return newString
}
}
λ€λ₯Έ μ¬λ μ½λλ₯Ό 보λκΉ μ μ½λμμ κ°μ ν΄μΌν μ μ΄ λ§λ€μ..
μ²μμ Enter Leave Changeλ₯Ό λλ μ μκ°νλ€λ³΄λκΉ switch λ¬Έμ κ·Έλλ‘ κ°μ Έκ° μ±λ‘ μ½λλ₯Ό μμ νλλ°,
λ κ°κ²°νκ² μ§€ μ μλ€μ₯.
κ°μ₯ ν° κ±΄, μ΄μ°¨νΌ λλ€μμ κ°μ₯ λ§μ§λ§μΌλ‘ λ³κ²½λ λλ€μλ§ νμνλκΉ
switch λ¬ΈμΌλ‘ λλ νμ μμ΄ κ·Έλ₯ κ³μν΄μ updateλ₯Ό ν΄μ£Όλ©΄λ©λλ€.
κ·Έλ¦¬κ³ νν°λ₯Ό νμ©ν΄μ λ€λ₯Έ result λ°°μ΄μ λ§λ€ νμμμ΄ μμλλ‘ return ν΄μ£Όλλ°μ.
changeκ° ν¬ν¨λμ§ μμ κΈ°λ‘λ€λ§ νν°λ§ν΄μ κ·Έ κ°μ μΆλ ₯νμμ λ§κ² λ°κΏμ€λλ€.
μ΄λ κ² λ³΄λκΉ λκ² κ°λ¨ν λ¬Έμ κ°λ€μ.
λ λ₯κ·Έλ©κ·Έμ²κ·Έμ΄...............................
μ€λμ TIL.
μλ . . . . . . .
'Private > TIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| 20230403 TIL (2) | 2023.04.04 |
|---|---|
| 20230402 TIL (0) | 2023.04.02 |
| 20230331 TIL (1) | 2023.04.01 |
| 20230330 TIL (2) | 2023.03.31 |
| 20230329 TIL (2) | 2023.03.30 |