티스토리 뷰

Algorithm/Baekjoon

[Swift] 백준 10026: 적록색약

내일은개발천재🎵 2022. 4. 21. 20:16

 문제 사이트 

 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net


 알고리즘 

  1. 그래프 (RGB 적혀진 코드)를 입력 받는다.
    G를 R로 변환하여 graphRB에 저장한다.
  2. 반복문을 통해 graph를 탐색한다. 
    현재 좌표에 A 가 저장되어있다면 이미 방문했다는 의미
    A가 아닐 때 dfs 함수를 호출한다.
  3. dfs에서는 상하좌우로 탐색하며, 이전 값과 동일한 경우만 탐색한다.
    이전이 R이라면 R만 탐색할 수 있도록
  4. graph에 graphRB를 저장한 후 다시 dfs를 호출한다.

 

* graph를 매개변수로 넣었더니, 매개변수가 상수형태여서 값을 바꿀 수 없다고 해서 코드가 좀 뱅뱅 도는 느낌이 있다.
추후에 수정이 필요한 부분이다.


 나의 코드 

import Foundation
let n = Int(readLine()!)!
var graph: [[Character]] = []
var graphRB = graph
var resultRGB = 0
var resultRB = 0
for _ in 1...n{
    var input = String(readLine()!)
    graph.append(input.map{ ($0) })
    input = input.replacingOccurrences(of: "G", with: "R")
    graphRB.append(input.map{ ($0) })
}

for x in 0..<n{
    for y in 0..<n{
        if graph[x][y] != "A"{
            resultRGB += dfs(x: x, y: y, value: graph[x][y])
        }
    }
}
graph = graphRB
for x in 0..<n{
    for y in 0..<n{
        if graph[x][y] != "A"{
            resultRB += dfs(x: x, y: y, value: graph[x][y])
        }
    }
}

print(resultRGB, resultRB)

func dfs(x: Int, y: Int, value: Character) -> Int{
    if x < 0 || y < 0 || x >= n || y >= n{
        return 0
    }
    if graph[x][y] == value{
        graph[x][y] = "A"
        dfs(x: x-1, y: y, value: value)
        dfs(x: x+1, y: y, value: value)
        dfs(x: x, y: y-1, value: value)
        dfs(x: x, y: y+1, value: value)
    }
    return 1
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함