๐ TIL - swapAt(_ i: ,_ j: )
๋ฐฐ์ด ๋ด๋ถ์์ ๋ ๊ฐ์ ์์์ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ผํ ๋๊ฐ ์๋ค. ๊ทธ๋ด๋ ๋ฌผ๋ก ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
temp๋ผ๋ ์์ ๋ณ์์ ํ์ฌ ์์น์ ๊ฐ์ ์ ์ฅํด๋ ํ, ๋ฐ๋ ์๋ฆฌ์ temp๋ฅผ ๋ฃ์ด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
var array = [1, 2, 3]
for i in 0..<2 {ใท
var temp = array[i]
array[i] = array[i+1]
array[i+1] = temp
}
๋ฌผ๋ก , 2์ฐจ์ ๋ฐฐ์ด์์ ๋ค๋ฅธ ๋ฐฐ์ด๋ผ๋ฆฌ์ ๊ฐ ๋ฐ๊ฟ์ด ํ์ํ๋ค๋ฉด ์ด๋ ๊ฒ ์์ฑํด์ผํ๋ค. ํ์ง๋ง, ํ ๋ฐฐ์ด ์์์ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ์์ ๊ตณ์ด ์ด๋ ๊ฒ ํ์ง ์๊ณ swapAt() ์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฐ๋ฉด ๊ฐ๋จํ๋ค.
var array = [1,2,3]
array.swayAt(1, 2)
์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด, index๊ฐ 1์ธ ๊ฒ๊ณผ 2์ธ๊ฒ์ ์์น๊ฐ ๋ฐ๋๋ค. ์ ์์์์๋ 2์ 3์ ์์น๊ฐ ๋ฐ๋๊ฒ ์ง?
๐ ๋ฌธ์
https://www.acmicpc.net/problem/3085
๐ ๋์ ํ์ด
์๋ ์,, ๋๋์ฒด ์ ์ด๋ฐ ๋๋ ค์์ด ์๊ฒผ๋์ง ๋ชจ๋ฅด๊ฒ๋๋ฐ, ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ฉด ์๋๋ค๋ ์ด์ํ ๊ฐ๋ฐ์ด ์๊ฒผ๋ค. ์๊ฐ๋ณต์ก๋๋ ๊ฒฐ์ฝ ๊ธธ์ด์ ๊ด๋ จ๋๋๊ฒ ์๋๋ฐ ์ ์ด๋ฐ ๋๋ ค์์ด ์๊ฒผ์๊น ์ด์์ ์์์ ๋จธ๋ฆฌ์ํ! ์ผ๋จ ํ์ด๋ณด์.
๋๋๊ฒ๋ ์ฒ์ ํ ํ์ด์ ๋ ๊ฐ์ ์ฝ๋๊ฐ ์์ฑ๋์๋ค. (์ฒซ๋ฒ์งธ ํ์ด)
๋จผ์ , ์์๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ๋ ฅ ๋ฐ์ ๊ฒ์ด๋ค. ์์ 1๋ฒ์ ๋ณด๋ฉด, ํด๋น ์ ๋ ฅ์ [[C, C, P], [C, C, P], [P, P, C]] ์ด๋ ๊ฒ ์ ๋ ฅ์ด ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ํ ๋ฐฉํฅ์ด๋ , ์ด ๋ฐฉํฅ์ด๋ ์๋ฆฌ๋ฅผ ํ๋ฒ๋ง ๋ฐ๊พธ๊ณ , ์ธ์ ํ ๊ฒ๋ค์ max ๊ฐ์ ์ฐพ์์ฃผ๋ฉด ๋๋ค. ๋ณต์กํ์ง ์์๋๊ฒ, ์ธ์ ํ ๋๋ค์ ์ธ์ด์ค ๋๋ ํ๋ฐฉํฅ๊ณผ ์ด๋ฐฉํฅ์ผ๋ก๋ง ์งํ๋์ด ๊ฐฏ์๊ฐ ์ธ์ด์ง๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๋ค.
- for๋ฌธ์ ์ด์ฉํด์ ์ฐจ๋ก๋๋ก ํ๋ผ๋ฆฌ ๋ฐ๊ฟ์ค๋ค. (ํ์ฌ ๊ธฐ์ค ์ค๋ฅธ์ชฝ ์์์๋ ์ฌํ๊ณผ ์๋ฆฌ ๋ฐ๊ฟ์ค)
- ํ๋ผ๋ฆฌ ์ธ์ ํ ์ ๋ค์ ๊ฐฏ์๋ฅผ ์ธ์ด๋ณธ๋ค.
- ์ด๋ผ๋ฆฌ ์ธ์ ํ ์ ๋ค์ ๊ฐฏ์๋ฅผ ์ธ์ด๋ณธ๋ค.
- ๋ค์ ์๋ฆฌ๋ฅผ ์๋๋๋ก ๋๋ ค์ค๋ค
- ๋ค์ ์ด๋ผ๋ฆฌ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ค๋ค. (์์๋ ์์นํ ์ฌํ๋ค์ ์์น๋ฅผ ๋ฐ๊ฟ์ค)
- ํ๋ผ๋ฆฌ ์ธ์ ํ ์ ๋ค์ ๊ฐฏ์๋ฅผ ์ธ์ด๋ณธ๋ค.
- ์ด๋ผ๋ฆฌ ์ธ์ ํ ์ ๋ค์ ๊ฐฏ์๋ฅผ ์ธ์ด๋ณธ๋ค.
- ๋ค์ ์๋๋๋ก ์๋ฆฌ๋ฅผ ๋๋ ค๋์ค๋ค.
- (๋ฐ๋ณต)
์ด๋ ๊ฒ ๊ตฌํํ๋ค!
๐ ์ ๋ต์ฝ๋
๊ฐฏ์๋ฅผ ์ธ์ด์ฃผ๋ ํจ์๋ rowCount(), colCount()๋ก ํด์ ๋ฐ๋ก ๊ตฌํํด์คฌ๋ค.
import Foundation
private func solution() {
var result = [Int]()
let n = Int(readLine()!)!
var candy = [Array<Character>]()
for _ in 0..<n {
candy.append(Array(readLine()!))
}
for i in 0..<n {
for j in 0..<n-1 {
// ํ๋ผ๋ฆฌ ๋ฐ๊ฟ
candy[i].swapAt(j, j+1)
result.append(colCount(n: n, candy: candy))
result.append(rowCount(n: n, candy: candy))
candy[i].swapAt(j, j+1)
// ์ด๋ฐ๊ฟ
var temp = candy[j][i]
candy[j][i] = candy[j+1][i]
candy[j+1][i] = temp
result.append(colCount(n: n, candy: candy))
result.append(rowCount(n: n, candy: candy))
temp = candy[j][i]
candy[j][i] = candy[j+1][i]
candy[j+1][i] = temp
}
}
print(result.max()!)
}
private func colCount(n: Int, candy: [Array<Character>]) -> Int {
var result = -999
for i in 0..<n {
var count = 1
for j in 0..<n-1 {
if candy[i][j] == candy[i][j+1] {
count += 1
} else {
result = max(result, count)
count = 1
}
}
result = max(result, count)
}
return result
}
private func rowCount(n: Int, candy: [Array<Character>]) -> Int {
var result = -999
for i in 0..<n {
var count = 1
for j in 0..<n-1 {
if candy[j][i] == candy[j+1][i] {
count += 1
} else {
result = max(result, count)
count = 1
}
}
result = max(result, count)
}
return result
}
solution()
๐ฌ ๋ฒ์ธ
๊ทธ๋ฅ colCount์ rowCount๊ฐ ๊ณ ์ i์ j ์ ์์น๋ง ๋ค๋ฅธ๋ฐ, ์ฝ๋๊ฐ ์ค๋ณต๋์ด ๋ค๋ฅธ ํจ์๋ก ์กด์ฌํ๋๊ฒ ๋ง์์ ์๋ค์๋ค. enum์ ํตํด์ type์ ๋ถ๋ฆฌํด์ฃผ๊ณ , ํ๋์ function์ผ๋ก ํฉ์น๋ฉด ๊ฐ๋ ์ฑ์ด ๋ ์ข์์ง์ง ์์๊น ์๊ฐ๋์ด, ๊ทธ๋ฅ,, ๊ทธ๋ ๊ฒ ๋ค์ ํด์คฌ๋ค..
import Foundation
private enum type {
case colCount
case rowCount
}
private func solution() {
var result = [Int]()
let n = Int(readLine()!)!
var candy = [Array<Character>]()
for _ in 0..<n {
candy.append(Array(readLine()!))
}
for i in 0..<n {
for j in 0..<n-1 {
// ํ๋ผ๋ฆฌ ๋ฐ๊ฟ
candy[i].swapAt(j, j+1)
result.append(countCloseCandy(type: type.rowCount, n: n, candy: candy))
result.append(countCloseCandy(type: type.colCount, n: n, candy: candy))
candy[i].swapAt(j, j+1)
// ์ด๋ฐ๊ฟ
var temp = candy[j][i]
candy[j][i] = candy[j+1][i]
candy[j+1][i] = temp
result.append(countCloseCandy(type: type.rowCount, n: n, candy: candy))
result.append(countCloseCandy(type: type.colCount, n: n, candy: candy))
temp = candy[j][i]
candy[j][i] = candy[j+1][i]
candy[j+1][i] = temp
}
}
print(result.max()!)
}
private func countCloseCandy(type: type, n: Int, candy: [Array<Character>]) -> Int {
var result = -999
for i in 0..<n {
var count = 1
for j in 0..<n-1 {
switch type {
case .colCount:
if candy[i][j] == candy[i][j+1] {
count += 1
} else {
result = max(result, count)
count = 1
}
case .rowCount:
if candy[j][i] == candy[j+1][i] {
count += 1
} else {
result = max(result, count)
count = 1
}
}
}
result = max(result, count)
}
return result
}
solution()
์ง์ง ๋!
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 1107๋ฒ - ๋ฆฌ๋ชจ์ปจ (์์ ํ์, ๋๋ฒ์งธ ์ค๋ต๋ ธํธ) (0) | 2022.12.30 |
---|---|
[๋ฐฑ์ค] (Swift) 1476๋ฒ - ๋ ์ง๊ณ์ฐ (0) | 2022.12.29 |
[๋ฐฑ์ค] (Swift) 2309๋ฒ - ์ผ๊ณฑ๋์์ด (1) | 2022.12.28 |
[๋ฐฑ์ค] (Swift) 6588๋ฒ - ๊ณจ๋๋ฐํ์ ์ถ์ธก (1) | 2022.12.27 |
[๋ฐฑ์ค] (Swift) 1929๋ฒ - ์์์ฐพ๊ธฐ (๋ ๋ฑ์ฅํ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด) (2) | 2022.12.27 |