728x90
17837번: 새로운 게임 2
재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하
www.acmicpc.net
🤔 문제분석
시뮬레이션 문제로 주어진 조건을 잘 분석하여 분기처리하여 문제를 풀면 풀 수 있다. 3가지 로직을 구현하여 조합하면 된다.
- 파란색과 범위를 벗어나는 조건
- 자기자신위에 있는 배열을 구하는 방법
- 자기자신위에 배열을 구하는방법은 현재 채스판의 위치에서 자기자신의 인덱스를 찾아서 그 인덱스를 기준으로 모든 값을 복사한다. 그리고 그 인덱스를 기준으로 모든값을 제거시킨다.
- 빨간색일때 배열을 뒤집는방법
- 파이썬의 리스트 컴프리핸션을 사용하여 뒤집었다. [-1::-1] 사용
💻 코드
import sys
moves = [(0, 1), (0, -1), (-1, 0), (1, 0)]
WHITE = 0
RED = 1
BLUE = 2
input = sys.stdin.readline
N, K = map(int, input().split())
chess = [[[] for _ in range(N)] for _ in range(N)]
horse = []
table = [list(map(int, input().split())) for _ in range(N)]
def chage_direction(dir):
if dir in [0, 2]:
return dir + 1
if dir in [1, 3]:
return dir - 1
def solve(i):
y, x , dir = horse[i]
dy, dx = moves[dir]
ny, nx = dy + y, dx + x
if nx >= N or nx < 0 or ny >=N or ny < 0 or table[ny][nx] == BLUE:
dir = chage_direction(dir)
horse[i][2] = dir
dy, dx = moves[dir]
ny, nx = dy + y, dx + x
if nx >= N or nx < 0 or ny >=N or ny < 0 or table[ny][nx] == BLUE:
return False
horse_up = []
for idx, num in enumerate(chess[y][x]):
if num == i:
horse_up.extend(chess[y][x][idx:])
chess[y][x] = chess[y][x][:idx]
break
if table[ny][nx] == RED:
horse_up = horse_up[-1::-1]
for num in horse_up:
horse[num][0], horse[num][1] = ny, nx
chess[ny][nx].append(num)
if len(chess[ny][nx]) >= 4:
return True
else:
return False
for i in range(K):
y, x, d = map(int, input().split())
y -= 1
x -= 1
d -= 1
chess[y][x].append(i)
horse.append([y, x, d])
is_finished = False
time = 0
while True:
if time > 1000:
print(-1)
break
for i in range(K):
if solve(i):
is_finished = True
break
time += 1
if is_finished:
print(time)
break
🎯 피드백 및 개선사항
시물레이션이나 구현문제를 풀때 마음이 급해지면 오히려 문제가 잘 안풀리는 것같습니다. 문제가 잘 안풀릴때 심호흡을 한번 하고 문제를 다시 접근해 보는건 어떨까요~? 😀
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 21610번 : 마법사 상어와 비바라기 (0) | 2024.02.29 |
---|---|
[백준] 19237번 : 어른 상어 (0) | 2024.02.28 |
[백준] 17825번 : 주사위 (1) | 2024.02.26 |
[백준] 4803번 : 트리 (1) | 2024.02.26 |
[백준] 16120번 : PPAP (0) | 2024.02.26 |