<aside> 💬 lv1, 행렬

로봇 청소기의 경로 계산

문제 설명

과학 연구소에서는 로봇 청소기를 개발하고 있습니다. 이 로봇 청소기는 특정한 크기의 방 안에서 주어진 경로를 따라 움직입니다. 방의 크기는 MxN 행렬로 표현되며, 각 칸은 청소가 필요한 상태(1) 또는 이미 청소된 상태(0)로 표시됩니다. 로봇 청소기는 (0,0)에서 출발하여, 주어진 경로에 따라 움직이며 청소를 진행합니다. 경로가 끝날 때, 로봇이 청소한 칸의 수를 반환하는 코드를 작성해주세요.


제한 사항


입출력 예

입력 (방 상태, 경로) 출력 (청소한 칸의 수)
([[1,1,0,0], [0,1,1,1], [1,0,0,1]], "RDDRUL") 4

입출력 설명

로봇이 "RDDRUL" 경로에 따라 움직이면, 총 5개의 칸을 청소합니다. 경로에 따라 청소한 칸의 수를 반환합니다.

</aside>

😺 풀이 1. 딕셔너리 활용

def solution(data):
    room, path = data **#1 입력 데이터 처리**
    rows, cols = len(room), len(room[0]) **#2 초기 변수 설정**
    directions = {"U": (-1, 0), "D": (1, 0), "L": (0, -1), "R": (0, 1)}
    cleaned_count = 0
    x, y = 0, 0

    if room[0][0] == 1: **#3 첫번째 칸 청소 여부 확인**
        cleaned_count += 1
        room[0][0] = 0

    for step in path: **#4 이동 경로를 따라 청소 실행**
        dx, dy = directions[step]
        nx, ny = x + dx, y + dy

        # 경로가 방 안에 있고, 아직 청소되지 않은 칸이라면 청소
        if 0 <= nx < rows and 0 <= ny < cols and room[nx][ny] == 1:
            cleaned_count += 1
            room[nx][ny] = 0  # 청소된 상태로 표시

        # 로봇 위치 업데이트
        if 0 <= nx < rows and 0 <= ny < cols:
            x, y = nx, ny

    return cleaned_count **#5 결과 반환**

단계별 풀이 전략

  1. 입력 데이터 처리

    방의 상태와 로봇의 이동 경로를 입력데이터를 통해 각각 할당해준다. 즉 room에는 방의 상태가, path에는 이동할 경로가 할당된다.

  2. 초기 변수 설정

    방의 크기(행과 열), 이동 방향, 청소한 칸의 수, 로봇의 초기 위치를 설정한다.

    행과 열은 같을수도 / 같지 않을수도 있으므로 cols는 행 하나의 길이값을 기준으로 정한다.

    ”U”인 경우 행 하나만큼 줄어들고, "D"인 경우 행 하나만큼 늘어난다. 같은 방식으로 "L", "R"에 해당하는 좌표값을 directions에 지정해준다.

  3. 첫번째 칸 청소 여부 확인

    로봇이 시작 위치에서 청소가 필요한 경우, 청소를 수행한다.

  4. 이동 경로를 따라 청소 실행

    로봇이 이동 경로를 따라 이동하면서 청소가 필요한 칸을 청소.

    1. dx, dy = directions[step]path의 각 요소 step을 아까 생성해주었던 directions의 키 값으로 대입하고, 해당하는 값을 dx, dy에 할당해준다.
    2. nx, ny = x + dx, y + dy → 현재 좌표(x, y)값과 step의 좌표 dx, dy를 더해준다.
    3. 만약 nx의 값이 row보다 작고, ny의 값이 cols보다 작고, 현재좌표+ step의 좌표값인 dx, dy의 값이 1이라면 → cleaned_count 의 값을 1 추가해준뒤 0으로 변경해준다.
    4. 마지막으로 “현재 좌표”를 의미하는 x, y값에 이동한 후의 값 nx, ny를 재할당시켜준다.
  5. 결과 반환

    로봇이 청소한 칸의 총 갯수를 반환해준다.

알아둬야 할 개념

1차원 배열

딕셔너리

조건문과 반복문