dx, dy 테크닉을 이용해 격자에서의 이동을 간결하게 구현하는 방법을 배우게 됩니다.
Runtime: 79ms, Memory: 29MB (정답 - Runtime: 69ms, Memory: 29MB)
dxs, dys = [-1, 0, 0, 1], [0, -1, 1, 0] # W, S, N, E
# 서, 남, 북, 동
mapper = {
'W': 0,
'S': 1,
'N': 2,
'E': 3
}
n = int(input())
x, y = 0, 0 # 시작 위치
cnt = 0 # 걸린 시간 count
for _ in range(n):
_dir, move_dis = input().split()
move_dis = int(move_dis)
dir_num = mapper[_dir]
for _ in range(move_dis): # 이동 거리만큼
x, y = x + dxs[dir_num], y + dys[dir_num] # 이동 방향으로 이동
cnt += 1 # 이동하면 count 1 증가
if x == 0 and y == 0: # 시작 위치에 오면
break # 나가기
if x == 0 and y == 0:
break # 나가기
if x == 0 and y == 0: # 시작 위치면
print(cnt) # 시간 출력
else: # 아니면
print(-1) # -1 출력
Runtime: 98ms, Memory: 30MB (정답 - Runtime: 77ms, Memory: 30MB)
# 시작
x, y = 0, 0
# 동, 남, 서, 북
dxs, dys = [1, 0, -1, 0], [0, -1, 0, 1]
# 시작은 북쪽
dir_num = 3
ans = -1
time = 0
# 시작점으로 돌아왔는지 확인
def check(x, y):
if x == 0 and y == 0:
return True
return False
for n in input():
# 직진
if n == 'F':
x, y = x + dxs[dir_num], y + dys[dir_num] # 이동하면서
time += 1 # 시간 1 증가
# 왼쪽으로 90' 회전
elif n == 'L':
dir_num = (dir_num - 1 + 4) % 4 # 회전하면서
time += 1 # 시간 1 증가
# 오른쪽으로 90' 회전
elif n == 'R':
dir_num = (dir_num + 1) % 4 # 회전하면서
time += 1 # 시간 1 증가
# 시작점으로 돌아왔으면
if check(x, y):
ans = time # 답에 시간 저장
break
# 시작점으로 안 돌아왔으면 그대로 -1 출력
# 시작점으로 돌아왔으면 시간 출력
print(ans)
n, m = map(int, input().split())
grid = [[0] * n for _ in range(n)]
# 위, 아래, 오른쪽, 왼쪽
dxs, dys = [-1, 1, 0, 0], [0, 0, 1, -1]
# 계산한 좌표가 범위 내에 있는지 확인
def in_range(x, y):
if 0 <= x and x < n and 0 <= y and y < n:
return True
return False
# 위, 아래, 양옆으로 색칠 확인
def check(x, y):
color = 0
for dx, dy in zip(dxs, dys):
nx, ny = x + dx, y + dy
if in_range(nx, ny) and grid[nx][ny] == 1:
color += 1
# 색칠된 부분이 3개이면 true 반환
if color == 3:
return True
return False
for _ in range(m):
r, c = map(int, input().split())
r -= 1
c -= 1
grid[r][c] = 1
# 3개이면 1 출력, 아니면 0 출력
if check(r, c):
print(1)
else:
print(0)
⇒ 챌린지 시작하고 다른 참고 없이 정답 코드랑 가장 유사하게 작성함! 뿌듯😄
문제를 잘 읽자...
모든 격자를 확인하는 줄 알았고...
처음에 3개 이상인줄 알고 왜 틀리지 했다...