728x90
안녕하세요 코코종입니다
주말과 월화를 건너뛰고 왔네여 ㅋㅋㅋㅋㅋㅋ 주말에는 놀았고 월화에는 고뿔 이슈로 쉬었답니다.. 그래서 오늘은 2문제를 풀어봤어요!(시간이 남는다면 하나 더 푸는거로)
import Foundation
let n = Int(readLine()!) ?? 0
var board: [[Character]] = []
for _ in 0..<n {
board.append(Array(readLine()!))
}
var answer = 0
func changeBoard(_ board: [[Character]], r: Int, c: Int) {
var changedBoard = board
let dx = [-1, 0, 1, 0] // column
let dy = [0, 1, 0, -1] // row
for i in 0..<4 {
let rr = r + dy[i]
let cc = c + dx[i]
if rr >= 0 && rr < n && cc >= 0 && cc < n {
changedBoard[rr][cc] = board[r][c]
changedBoard[r][c] = board[rr][cc]
// print(r,c, rr, cc, ":", cntRowMax(changedBoard), cntColumnMax(changedBoard))
// print(r, c, rr, cc, changedBoard)
answer = max(answer, cntRowMax(changedBoard), cntColumnMax(changedBoard))
}
}
}
func cntRowMax(_ board: [[Character]]) -> Int {
var maxCnt = 0
for i in 0..<n {
var rowCnt = 1
for j in 0..<n-1 {
if board[i][j] == board[i][j+1] {
rowCnt += 1
} else {
maxCnt = max(maxCnt, rowCnt)
rowCnt = 1
}
}
}
return maxCnt
}
func cntColumnMax(_ board: [[Character]]) -> Int {
var maxCnt = 0
for i in 0..<n {
var columnCnt = 1
for j in 0..<n-1 {
if board[j][i] == board[j+1][i] {
columnCnt += 1
} else {
maxCnt = max(maxCnt, columnCnt)
columnCnt = 1
}
}
}
return maxCnt
}
for i in 0..<n {
for j in 0..<n {
changeBoard(board, r: i, c: j)
}
}
print(answer)
네;.. 또 틀린 풀이 먼저 가져왔습니다 >< 맞는데 뭐가 틀렸냐고 계속 얘랑 눈싸움을 하다가 알아냈는데요...
아마 열어분들도 '맞왜틀??' 하다가 여기까지 흘러들어오신게 아닐까 합니다
(아 그리고 처음에 문제를 잘못 읽어서 행, 열 만 보는게 아니라 다른 bfs문제처럼 막 넓혀가면서 풀다가 문제를 다시 읽었네요 ㅋㅋ)
어디가 틀렸다면 바로바로 changedBoard를 초기화 하는 부분이 틀렸답니닷.. 하하.. 지금처럼 되어있으면 이전에 바뀐것도 changedBoard에 적용되어버려서 뒤죽박죽 엉망진창이 되어버린다구엿... ㅜㅜ 하나씩 print 찍으면서 찾았습니다...
그리고 또 행, 열에서 최댓값을 구할때 계속 같은거면 maxCnt를 갱신해주지 않았더라구요 ^^... 망충망충
import Foundation
let n = Int(readLine()!) ?? 0
var board: [[Character]] = []
for _ in 0..<n {
board.append(Array(readLine()!))
}
var answer = 0
func changeBoard(_ board: [[Character]], r: Int, c: Int) {
let dx = [-1, 0, 1, 0] // column
let dy = [0, 1, 0, -1] // row
for i in 0..<4 {
let rr = r + dy[i]
let cc = c + dx[i]
if rr >= 0 && rr < n && cc >= 0 && cc < n {
var changedBoard = board // 놓친 부분 -> 4방향으로 갈때마다 보드를 초기화 해야하는데 그전에 초기화해서 정보가 남아버림..
changedBoard[rr][cc] = board[r][c]
changedBoard[r][c] = board[rr][cc]
answer = max(answer, cntRowMax(changedBoard), cntColumnMax(changedBoard))
}
}
}
func cntRowMax(_ board: [[Character]]) -> Int {
var maxCnt = 0
for i in 0..<n {
var rowCnt = 1
for j in 0..<n-1 {
if board[i][j] == board[i][j+1] {
rowCnt += 1
} else {
maxCnt = max(maxCnt, rowCnt)
rowCnt = 1
}
}
maxCnt = max(maxCnt, rowCnt) // 놓쳤던 부분 - 계속 같은거면 maxCnt가 갱신이 안댐
}
return maxCnt
}
func cntColumnMax(_ board: [[Character]]) -> Int {
var maxCnt = 0
for i in 0..<n {
var columnCnt = 1
for j in 0..<n-1 {
if board[j][i] == board[j+1][i] {
columnCnt += 1
} else {
maxCnt = max(maxCnt, columnCnt)
columnCnt = 1
}
}
maxCnt = max(maxCnt, columnCnt) // 놓쳤던 부분 - 계속 같은거면 maxCnt가 갱신이 안댐
}
return maxCnt
}
for i in 0..<n {
for j in 0..<n {
changeBoard(board, r: i, c: j)
}
}
print(answer)
주석으로 해당 부분에 대한 설명을 달아두었습니다! 참고해보시와요~
728x90
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] 백준 1992 쿼드트리 (0) | 2023.04.16 |
---|---|
[Swift 알고리즘] 백준 1189 컴백홈 (2) | 2023.04.12 |
[Swift 알고리즘] 백준 21758 꿀 따기 (0) | 2023.04.07 |
[Swift 알고리즘] 백준 17615 볼 모으기 (0) | 2023.04.07 |
[Swift 알고리즘] 백준 1180 행렬 (7) | 2023.04.06 |