[프로그래머스] 방문 기록 - Swift

이창형·2023년 4월 24일
0

문제가 길어 링크로 대체합니다!

https://school.programmers.co.kr/learn/courses/30/lessons/49994

코드

func solution(_ dirs:String) -> Int {
    var now = [0, 0]
    var visited: Set<[Int]> = []
    
    for i in dirs {
        var (dx, dy) = (0,0)
        
        switch i {
        case "U": (dx, dy) = (0, 1)
        case "D": (dx, dy) = (0, -1)
        case "L": (dx, dy) = (-1, 0)
        case "R": (dx, dy) = (1, 0)
        default: break
        }
        
        let next = [now[0]+dx, now[1]+dy]
        
        if abs(next[0]) > 5 || abs(next[1]) > 5 {
            continue
        }
        
        // 중요 !! 
        //(0,0)에서(0,1)로 간 길이나 (0,1)에서(0,0)로 간 길은 같기 때문에 둘다 체크 필요!
        if !visited.contains(now+next) && !visited.contains(next+now){
            visited.insert(now+next)
        }
        now = next
    }
    
    return visited.count
}

회고

  • 처음에는 무식하게 if문을 중첩으로 써서 모든 길을 저장하고 찍힌 좌표에 따라 카운팅을 하였다.
  • visited를 사용하여 하면 좋을 것 같다고 생각했지만 떠오르지 않아 검색을 통해 좋은 알고리즘을 찾아서 확인 후 다시 풀었다
  • 언제쯤 이런 생각을 할까
profile
iOS Developer

0개의 댓글