[프로그래머스 LV2] 방문 길이

Junyoung Park·2022년 9월 10일
0

코딩테스트

목록 보기
611/631
post-thumbnail

1. 문제 설명

방문 길이

2. 문제 분석

중복 경로를 제거, 방문한 총 길이를 구하는 문제. Hashable 프로토콜을 사용하면 특정 구조체를 집합의 원소로 사용할 수 있기 때문에 경로(노드1-노드2, 노드2-노드1) 자체를 집합의 원소로 카운트했다.

  • 또 다른 방식으로는 2차원 불리언 변수 배열을 통해 방문 여부를 카운트, 모든 방문이 끝난 뒤 BFS를 통해 원점에서 방문 가능한 총 길이를 리턴할 수도 있다.
  • BFS를 통해 푸는 게 메모리적 측면에서 보다 효율적일 수 있을 것 같다.

3. 나의 풀이

import Foundation

struct Position: Hashable {
    var row: Int
    var col: Int
}

struct Positions: Hashable {
    let position1: Position
    let position2: Position
}

func solution(_ dirs:String) -> Int {
    var positionSet = Set<Positions>()
    var curPos = Position(row: 0, col: 0)
    
    for dir in dirs {
        var nextRow = curPos.row
        var nextCol = curPos.col
        switch dir {
            case "U":
                nextRow += 1
            case "D":
                nextRow -= 1
            case "R":
                nextCol += 1
            case "L":
                nextCol -= 1
            default:
                continue
        }
        if nextRow < -5 || nextRow > 5 || nextCol < -5 || nextCol > 5 {
            continue
        } else {
            let nextPos = Position(row: nextRow, col: nextCol)
            let route1 = Positions(position1: curPos, position2: nextPos)
            let route2 = Positions(position1: nextPos, position2: curPos)
            positionSet.insert(route1)
            positionSet.insert(route2)
            curPos = nextPos
        }
    }
        
    return positionSet.count / 2
}
profile
JUST DO IT

0개의 댓글