๐ ๋ฌธ์ ์ ๋ณด
- ๋ฌธ์ ์ถ์ฒ: ๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง
- ๋ฌธ์ ๋งํฌ: 17140 ์ด์ฐจ์ ๋ฐฐ์ด๊ณผ ์ฐ์ฐ
- ์ ์ถ ์ธ์ด: Swift
- ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ:
- ๊ตฌํ
- ์ ๋ ฌ
- ์๋ฎฌ๋ ์ด์
๐๏ธ ํ์ด
๋ณต์กํ์ง๋ง ๋ฌธ์ ๋ฅผ ์ ์ฝ๊ณ ๋ถ์ํ๋ฉด ๊ตฌํํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ฃผ์ด์ง ์กฐ๊ฑด
- ํ์ ๊ฐ์๊ฐ ๋ ๋ง๊ฑฐ๋ ๊ฐ์ผ๋ฉด R ์ฐ์ฐ, ์ด์ ๊ฐ์๊ฐ ๋ ๋ง์ C ์ฐ์ฐ ์คํ
- ์ฐ์ฐ์ ๊ฐ๊ฐ์ ์๊ฐ ๋ช ๋ฒ ๋์๋์ง ๊ตฌํ์ฌ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ ๋ฐฐ์ด์ ๋ฃ๋๋ค
- (์ฐ์ ์์ : ๋ฑ์ฅ ํ์ -> ์) ( ๋ฃ๋ ์์ : ์ , ๋ฑ์ฅ ํ์)
- ํฌ๊ธฐ๊ฐ ์ปค์ง ๊ณณ์ 0 ์ผ๋ก ์ฑ์ด๋ค, ์ ์ฐ์ฐ ์ 0์ ๋ฌด์ํ๋ค
- ํ ๋๋ ์ด์ ํฌ๊ธฐ๊ฐ 100 ๋์ด๊ฐ๋ฉด 100๊ฐ ์ ์ธํ ๋๋จธ์ง๋ ๋ฒ๋ฆฐ๋ค
- A[r][c] == k๊ฐ ๋๊ธฐ ์ํ ์ฐ์ฐ์ ์ต์ ์๊ฐ ์ถ๋ ฅ 100์ด๊ฐ ์ง๋๋ ์๋๋ฉด -1 ์ถ๋ ฅ
์ ๊ทผ ๋ฐฉ๋ฒ
1. Dictionary๋ก ๋ฑ์ฅ ํ์ ์ธ๊ธฐ
์ฐ์ฐ์ Dictionary์ ํด๋น ์์๊ฐ ๋ฑ์ฅํ ํ์๋ฅผ ์ ์ฅํ๋ค.
Swift๋ Dictionary ์์์ ์ ๊ทผํ ๋ ํญ์ optional ๊ฐ์ผ๋ก ๋ฐํํ๋ค.
์ฆ, Dictionary[key] ํํ๋ก ์ ๊ทผํ์ ๋ value๊ฐ ์๋ ๊ฒฝ์ฐ optioanl(value)๊ฐ, value๊ฐ ์๋ ๊ฒฝ์ฐ nil๊ฐ์ ๋ฐํํ๋ค.
์๋์ ์ฝ๋์ ๊ฐ์ด ์ผํญ ์ฐ์ฐ์๋ก ํด๋น key์ value๊ฐ์ด nil์ผ ๊ฒฝ์ฐ 1, ์๋ ๊ฒฝ์ฐ 1์ ๋ํด์ค์ ์์์ ๊ฐ์๋ฅผ countํ์๋ค.
dic[num] == nil ? (dic[num] = 1) : (dic[num] = dic[num]! + 1)
2. dictionary ์ ๋ ฌํ๊ธฐ
ํด๋ก์ ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ด์ dictionary๋ฅผ ์ ๋ ฌํด์ฃผ์๋ค.
์ด ๋ํ, ์ผํญ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์ฐ์ ์์( ๋ฑ์ฅ ํ์ -> ์ )์ ๋ง๊ฒ ์ ๋ ฌํ๋ค.
key๊ฐ ์์ด๊ณ value๊ฐ ๋ฑ์ฅ ํ์์ด๋ฏ๋ก ๋ฑ์ฅํ์๊ฐ ๊ฐ๋ค๋ฉด ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก, ๊ฐ์ง ์๋ค๋ฉด ๋ฑ์ฅ ํ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
dic.sorted(by: { $0.value == $1.value ? $0.key < $1.key : $0.value < $1.value})
3. C ์ฐ์ฐ
R ์ฐ์ฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ค๋ฃจ๋ ๋ฐฉ์์ผ๋ก ์ต์ํ๊ฒ ์ํํ ์ ์์์ง๋ง, C ์ฐ์ฐ์ ์ด ๊ธฐ์ค์ด๋ฏ๋ก ์ธ๋ก๋ก ๋ด์ผํ๊ธฐ์ ๋ณต์กํ๋ค.
๊ทธ๋์, tempArr๋ฅผ ๋ง๋ค์ด ์ ๋ ฌ๋ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ R ์ฐ์ฐ๊ณผ ๊ฐ์ด ๊ฐ๋ก๋ก ๊ตฌํ ๋ค์, tempArr์ ํ๊ณผ ์ด์ ๋ฐ๊พธ์ด ์ฃผ์๋ค.
ex)
// 1 2 3
// 4 5 6
->
// 1 4
// 2 5
// 3 6
๐ฉ๐ป๐ป ์ ์ฒด ์ฝ๋
let n = readLine()!.split(separator: " ").map{Int(String($0))!}
let (r, c, k) = (n[0], n[1] ,n[2])
var A: [[Int]] = []
for _ in 1...3 {
A.append(readLine()!.split(separator: " ").map{Int(String($0))!})
}
func operation() -> Int {
var timer = 0
while timer <= 100 {
// ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ํ๋ r, c๊ฐ๋ณด๋ค ์์์ง ๊ฒฝ์ฐ index out ๋ฐฉ์ง
if r-1 < A.count && c-1 < A[0].count {
if A[r-1][c-1] == k { return timer }
}
// ํ์ ๊ฐ์๊ฐ ๊ฐ๊ฑฐ๋ ๋ ๋ง์ ๊ฒฝ์ฐ R ์ฐ์ฐ ์คํ
if A[0].count <= A.count {
rOperation()
}
// ์ด์ ๊ฐ์๊ฐ ๋ ํด๊ฒฝ์ฐ C ์ฐ์ฐ ์คํ
else {
cOperation()
}
timer += 1
}
return -1
}
// R ์ฐ์ฐ
func rOperation() {
var maxLength = 0
for i in 0..<A.count {
var dic: [Int:Int] = [:] // ๊ฐ์ count ๋์
๋๋ฆฌ
for num in A[i] {
if num == 0 { continue } // 0์ธ ๊ฒฝ์ฐ ๊ฐ์๋ฅผ ์ธ์ง ์๋๋ค
dic[num] == nil ? (dic[num] = 1) : (dic[num] = dic[num]! + 1)
}
A[i] = []
// ์๋ก์ด ๋ฐฐ์ด์ ํด๋น ์กฐ๊ฑด์ผ๋ก ์ ๋ ฌํ ๋์
๋๋ฆฌ๋ฅผ ๋๋ฉฐ ์, ๋ฑ์ฅ ํ์ ์์ผ๋ก ๋ฃ์ด์ค๋ค
for (key, value) in dic.sorted(by: { $0.value == $1.value ? $0.key < $1.key : $0.value < $1.value}) {
if A[i].count >= 100 { break } // 100๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ค๋จ
A[i].append(contentsOf: [key, value])
}
maxLength = max(maxLength, A[i].count)
}
// ๋น ๊ณต๊ฐ์ 0์ผ๋ก ์ฑ์์ฃผ๊ธฐ
for i in 0..<A.count {
A[i].append(contentsOf: Array(repeating: 0, count: maxLength - A[i].count))
}
}
// C ์ฐ์ฐ
func cOperation() {
var maxLength = 0
var tempArr: [[Int]] = Array(repeating: [], count: A[0].count)
for i in 0..<A[0].count {
var dic: [Int:Int] = [:]
for j in 0..<A.count {
if A[j][i] == 0 { continue }
dic[A[j][i]] == nil ? (dic[A[j][i]] = 1) : (dic[A[j][i]]! = dic[A[j][i]]! + 1)
}
// tempArr์ R ์ฐ์ฐ๊ณผ ์ ์ฌํ๊ฒ ํ๋์ ์ด์ ๊ณ์ฐํ ํ, ํ ํํ๋ก ๋ฃ์ด์ค๋ค
for (key, value) in dic.sorted(by: { $0.value == $1.value ? $0.key < $1.key : $0.value < $1.value}) {
tempArr[i].append(contentsOf: [key, value])
}
maxLength = max(maxLength, tempArr[i].count)
}
for i in 0..<tempArr.count {
tempArr[i].append(contentsOf: Array(repeating: 0, count: maxLength - tempArr[i].count))
}
// ํ -> ์ด ํ์
A = Array(repeating: [], count: tempArr[0].count)
for i in 0..<tempArr.count {
for j in 0..<tempArr[0].count {
A[j].append(tempArr[i][j])
}
}
}
print(operation())
'Algorithm > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/Swift] ์ด๋ชจํฐ์ฝ ํ ์ธํ์ฌ (0) | 2023.06.06 |
---|---|
[๋ฐฑ์ค/Swift] 16953 A -> B (0) | 2023.06.06 |
[๋ฐฑ์ค/Swift] 2606 ๋ฐ์ด๋ฌ์ค (0) | 2023.06.06 |
[ํ๋ก๊ทธ๋๋จธ์ค/Swift] ํ๋ฐฐ ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐํ๊ธฐ (0) | 2023.06.05 |
[๋ฐฑ์ค/Swift] 1303 ์ ์ - ์ ํฌ (1) | 2023.06.03 |