방명록
- [백준/BOJ] 10026번 적록색약 (Swift 스위프트)2024년 08월 08일 14시 24분 40초에 업로드 된 글입니다.작성자: 이중엽
문제 난이도: 골드 5
사용 알고리즘: DFS
처음 제시한 맵과 적록색약 맵 두 개를 만들었다.
각 맵은 아래와 같이 만들어진다.
map =
[["R", "R", "R", "B", "B"],
["G", "G", "B", "B", "B"],
["B", "B", "B", "R", "R"],
["B", "B", "R", "R", "R"],
["R", "R", "R", "R", "R"]]
rgMap =
[["G", "G", "G", "B", "B"],
["G", "G", "B", "B", "B"],
["B", "B", "B", "G", "G"],
["B", "B", "G", "G", "G"],
["G", "G", "G", "G", "G"]]
dfs를 통해 일치하는 색상만 탐색하여 dfs를 돌린 횟수를 기록하였다.
import Foundation let input = Int(readLine()!)! var map: [[String]] = Array<[String]>() var rgMap: [[String]] = Array<[String]>() var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: input), count: input) var directions = [(0, -1), (0, 1), (-1, 0), (1, 0)] var result = 0 var rgResult = 0 for _ in 0 ..< input { let data = readLine()!.map { String($0) } let rgData = data.map { datum -> String in if datum == "R" { return "G" } return datum } map.append(data) rgMap.append(rgData) } func dfs(x: Int, y: Int, color: String, map: [[String]]) { if x < 0 || x >= input || y < 0 || y >= input || map[y][x] != color || visited[y][x] { return } visited[y][x] = true for direction in directions { let newX = x + direction.0 let newY = y + direction.1 dfs(x: newX, y: newY, color: color, map: map) } } for y in 0 ..< input { for x in 0 ..< input { if !visited[y][x] { result += 1 let color = map[y][x] dfs(x: x, y: y, color: color, map: map) } } } print(result) visited = Array(repeating: Array(repeating: false, count: input), count: input) for y in 0 ..< input { for x in 0 ..< input { if !visited[y][x] { rgResult += 1 let color = rgMap[y][x] dfs(x: x, y: y, color: color, map: rgMap) } } } print(rgResult)
다른 사람 풀이를 봤더니, 편하게 data에서 replacingOccurrences라는 메서드로 "R"을 "G"로 바꾸고 있었다...
있는지도 몰랐는데, 하나 배웠다.
여기서 단순하게 color만 일치하지 않으면 패스해버리기 때문에, 굳이 visited를 안 쓰고 방문한 곳의 값을 바꿔주기만 했어도 됐다.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/BOJ] 11725번 트리의 부모 찾기 (Swift, 스위프트) (0) 2024.08.11 [백준/BOJ] 1987번 알파벳 (Swift 스위프트) (0) 2024.08.11 [백준/BOJ] 11724번 연결 요소의 개수 (Swift 스위프트) (0) 2024.08.07 다음글이 없습니다.이전글이 없습니다.댓글