[Python] 코드업 Python 100제 6098번 성실한 개미

2022. 1. 24. 15:32·Python 알고리즘
반응형

문제

영일이는 생명과학에 관심이 생겨 왕개미를 연구하고 있었다.

왕개미를 유심히 살펴보던 중 특별히 성실해 보이는 개미가 있었는데,
그 개미는 개미굴에서 나와 먹이까지 가장 빠른 길로 이동하는 것이었다.

개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직였다.
(오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.)

이에 호기심이 생긴 영일이는 그 개미를 미로 상자에 넣고 살펴보기 시작하였다.br />
미로 상자에 넣은 개미는 먹이를 찾았거나, 더 이상 움직일 수 없을 때까지
오른쪽 또는 아래쪽으로만 움직였다.

미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고,
먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.

단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는
더이상 이동하지 않고 그 곳에 머무른다고 가정한다.

미로 상자의 테두리는 모두 벽으로 되어 있으며,
개미집은 반드시 (2, 2)에 존재하기 때문에 개미는 (2, 2)에서 출발한다.

입력

10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.

1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 1 1 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 1 0 1 0 1
1 0 0 0 0 1 2 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1

 

출력

성실한 개미가 이동한 경로를 9로 표시해 출력한다.

1 1 1 1 1 1 1 1 1 1
1 9 9 1 0 0 0 0 0 1
1 0 9 1 1 1 0 0 0 1
1 0 9 9 9 9 9 1 0 1
1 0 0 0 0 0 9 1 0 1
1 0 0 0 0 1 9 1 0 1
1 0 0 0 0 1 9 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1

 

정답

import sys

# 미로 입력
miro_pos = [list(map(int, sys.stdin.readline().strip().split())) for _ in range(10)]

# index와 좌표를 맞추기 위해 1씩 줄임
x, y = 1, 1
# 시작지점을 지나간 길로 표시
miro_pos[x][y] = 9

while True:
    next_x = x + 1
    next_y = y + 1
    next_x_pos = miro_pos[y][next_x]
    next_y_pos = miro_pos[next_y][x]

    # 1. 오른쪽 길에서 먹이를 찾았다면
    # 2. 오른쪽 길이 막히고, 아래쪽 길이 막혔다면
    # 3. 오른쪽 길만 막혔다면
    # 4. 오른쪽 길이 안 막혀있다면
    if next_x_pos == 2:
        miro_pos[y][next_x] = 9
        break
    elif next_x_pos == 1 and next_y_pos == 1:
        miro_pos[y][x] = 9
        break
    elif next_x_pos == 1:
        miro_pos[next_y][x] = 9
        y = next_y

        # 아래쪽 길이 먹이라면
        if next_y_pos == 2:
            break
    elif next_x_pos == 0:
        miro_pos[y][next_x] = 9
        x = next_x

# 출력
for i in miro_pos:
    for j in i:
        print(j, end=' ')
    print('')

2차원 배열 및 조건문을 잘 활용한다면 풀 수 있었던 문제였다.

if는 우선순위를 잘 생각하고 짜는 게 좋다.

반응형

'Python 알고리즘' 카테고리의 다른 글

[Python] 그리디 알고리즘을 파헤쳐 보자! (곱하기 혹은 더하기)  (0) 2022.01.24
[Python] 그리디 알고리즘을 파헤쳐 보자! (1이 될 때까지)  (0) 2022.01.24
[Python] 코드업 Python 100제 6097번 설탕과자 뽑기  (0) 2022.01.24
[Python] 코드업 Python 100제 6096번 바둑알 십자 뒤집기  (0) 2022.01.24
[Python] 백준 1978번 소수 찾기  (0) 2021.10.04
'Python 알고리즘' 카테고리의 다른 글
  • [Python] 그리디 알고리즘을 파헤쳐 보자! (곱하기 혹은 더하기)
  • [Python] 그리디 알고리즘을 파헤쳐 보자! (1이 될 때까지)
  • [Python] 코드업 Python 100제 6097번 설탕과자 뽑기
  • [Python] 코드업 Python 100제 6096번 바둑알 십자 뒤집기
seungyong20
seungyong20
  • seungyong20
    코딩 기록소
    seungyong20
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Python 알고리즘 (38)
      • 자료구조 (1)
      • Project 하면서 알아가는 것들 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 기록하는 습관을 기르자
  • 인기 글

  • 태그

    multiplebagexception set list
    python heap
    python 2차원 배열
    jpa multiplebagexception
    jpa fetch
    python 그리디 알고리즘 문제 추천
    join fetch 주의점
    jpa 에러
    python 이코테
    python 그리디 문제 추천
    python 그리디 알고리즘
    jpa 쿼리 최적화
    python 백준
    multiplebagexception
    jpa lazy vs eager
    python 정렬
    kafka
    백준
    그리디 알고리즘
    Typescript
    Python
    jpa eager
    python 알고리즘
    spring boot
    JPA
    python 브루트 포스
    jpa n + 1 문제
    python 방향벡터
    python slicing
    fetch join 주의점
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seungyong20
[Python] 코드업 Python 100제 6098번 성실한 개미
상단으로

티스토리툴바