구름톤 챌린지 2주차의 마지막입니다. 챌린지를 통해 문제 풀이 실력을 향상시킬 수 있으며, 블로그에 학습 일기도 작성하면 추가 보상도 주어지니 관심 있으시면 참여해보시는 것을 추천드립니다.
https://level.goorm.io/l/challenge/goormthon-challenge
문제
입력 / 출력
풀이 과정
단순 시뮬레이션 구현으로 풀이했다. 이동하다가 이미 한 번이라도 방문한 칸을 다시 지나는 지를 검토하는 것이 중요 포인트인 문제이다. 맵 밖으로 나가면 반대쪽으로 돌아오는 구조이니 이 점도 주의해야 한다.
import sys
input = sys.stdin.readline
n = int(input().rstrip())
goormPos = list(map(int, input().rstrip().split()))
playerPos = list(map(int, input().rstrip().split()))
maps = [list(input().rstrip().split()) for _ in range(n)]
goormPos[0] -= 1; goormPos[1] -= 1; playerPos[0] -= 1; playerPos[1] -= 1;
def game(startPos):
visited = [[0 for _ in range(n)] for _ in range(n)]
cnt = 1
visited[startPos[0]][startPos[1]] = 1
done = 0
while True:
now = maps[startPos[0]][startPos[1]]
if now[-1] == 'L':
for _ in range(int(now[:-1])):
startPos[1] -= 1
if startPos[1] < 0: startPos[1] += n
if visited[startPos[0]][startPos[1]] == 1:
done = 1
break
else:
visited[startPos[0]][startPos[1]] = 1
cnt += 1
elif now[-1] == 'R':
for _ in range(int(now[:-1])):
startPos[1] = (startPos[1] + 1) % n
if visited[startPos[0]][startPos[1]] == 1:
done = 1
break
else:
visited[startPos[0]][startPos[1]] = 1
cnt += 1
elif now[-1] == 'U':
for _ in range(int(now[:-1])):
startPos[0] -= 1
if startPos[0] < 0: startPos[0] += n
if visited[startPos[0]][startPos[1]] == 1:
done = 1
break
else:
visited[startPos[0]][startPos[1]] = 1
cnt += 1
else: #D
for _ in range(int(now[:-1])):
startPos[0] = (startPos[0] + 1) % n
if visited[startPos[0]][startPos[1]] == 1:
done = 1
break
else:
visited[startPos[0]][startPos[1]] = 1
cnt += 1
if done: break
return cnt
goormScore = game(goormPos)
playerScore = game(playerPos)
if goormScore > playerScore: print('goorm', goormScore)
else: print('player', playerScore)
'-- 예전 기록 > [완료] 구름톤 챌린지' 카테고리의 다른 글
[ 구름톤 챌린지 ] 12일차 미션 - 발전기 (0) | 2023.08.29 |
---|---|
[ 구름톤 챌린지 ] 11일차 미션 - 통증 (2) (2) | 2023.08.28 |
[ 구름톤 챌린지 ] 9일차 미션 - 폭탄 구현하기 (2) (0) | 2023.08.24 |
[ 구름톤 챌린지 ] 8일차 미션 - 통증 (0) | 2023.08.23 |
[ 구름톤 챌린지 ] 7일차 미션 - 구름 찾기 깃발 (0) | 2023.08.22 |