Algorithm/연습
[이코테] 04. 구현
SETORY
2022. 1. 8. 22:27
예제 4-1
나의 풀이
# n=int(input())
# movement = list(input().split())
n=5
movement = ["R","R","R","U","D","D"]
def solutions(n,movement):
answer = 0
x,y = 1,1
# 상하좌우
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for move in movement:
print(move)
if move == "U":
nx = x+dx[0]
ny = y+dy[0]
elif move == "D":
nx = x+dx[1]
ny = y+dy[1]
elif move == "L":
nx = x+dx[2]
ny = y+dy[2]
elif move == "R":
nx = x+dx[3]
ny = y+dy[3]
if 0<nx<=n and 0<ny<=n:
x,y = nx,ny
print(x,y)
return [x,y]
print(solutions(n,movement))
다시 줄여서 써본 코드
# n=int(input())
# movement = list(input().split())
n=5
movement = ["R","R","R","U","D","D"]
def solutions(n,movement):
answer = 0
x,y = 1,1
# 상하좌우
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
move_type = ["U","D","L","R"]
for move in movement:
#print(move)
for idx in range(4):
if move == move_type[idx]:
nx = x+dx[idx]
ny = y+dy[idx]
if 0<nx<=n and 0<ny<=n:
x,y = nx,ny
print(x,y)
return [x,y]
print(solutions(n,movement))
예제 4-2 시각
n = int(input())
def solutions(n):
answer = 0
for i in range(n+1): # n시 59분까지니까
for j in range(60):
for k in range(60):
if '3' in str(i) + str(j) + str(k):
answer+=1
return answer
print(solutions(n))
실전 문제 왕실의 나이트
# 왕실의 나이트
password = input()
def solutions(password):
answer=0
target_x = int(ord(password[0])-ord('a')) + 1
target_y = int(password[1])
move_case = [(2,1),(2,-1),(-2,1),(-2,-1),(1,2),(1,-2),(-1,2),(-1,-2)]
for move in move_case:
nx = target_x + move[0]
ny = target_y + move[1]
if 1<=nx<=8 and 1<=ny<=8:
answer+=1
return answer
print(solutions(password))
게임 개발
n, m = map(int, input().split())
now = list(map(int, input().split()))
graph = []
for _ in range(n):
graph.append(list(map(int, input().split())))
d = [[0]*m for i in range(n)]
def solution(now, graph):
answer = 1 # 현재부터 시작 (현재도 방문한 칸 수 )
# 북, 동, 남, 서
dx = [-1, 0, 1, 0]
dy = [0, 1 ,0, -1]
x, y ,direction = now[0], now[1], now[2]
d[x][y] = 1 # 현재 출발 지점
def turn_left(direction):
direction += 1
if direction == 4:
direction = 0
return direction
turn_time = 0
while True :
# 먼저 왼쪽으로 회전
direction = turn_left(direction)
# print(direction)
nx = x + dx[direction]
ny = y + dy[direction]
if graph[nx][ny]==0 and d[nx][ny] ==0:
d[nx][ny] = 1
x = nx
y = ny
answer+=1
turn_time = 0
continue
#회전한 이후 정면에 가보지 않은 칸이 없거나 바다인 경우
else:
turn_time+=1
# 방향 다 돌았을 ㄱㅇ우
if turn_time ==4:
nx = x - dx[direction]
ny = y - dy[direction]
if graph[nx][ny] == 0:
x = nx
y = ny
else:
break
turn_time = 0
return answer
print(solution(now, graph))