상하좌우(좌표문제는 표를한번그려보자 x,y 증가폭이헷갈림)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# N 입력받기
n = int(input())
x, y = 1, 1
plans = input().split()
# L, R, U, D에 따른 이동 방향
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ['L', 'R', 'U', 'D']
# 이동 계획을 하나씩 확인
for plan in plans:
# 이동 후 좌표 구하기
for i in range(len(move_types)):
if plan == move_types[i]:
nx = x + dx[i]
ny = y + dy[i]
# 공간을 벗어나는 경우 무시
if nx < 1 or ny < 1 or nx > n or ny > n:
continue
# 이동 수행
x, y = nx, ny
print(x, y)
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 시각
n = 5
result = 0
for h in range(n+1):
print(h)
for m in range(60): # 0~59 까지
for s in range(60):
if '3' in str(h)+str(m)+str(s):
result+=1
print(result)
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 왕실의 나이트
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])-int(ord('a')))+1
# ord 로 아스키 코드값을 받아 0을 만들어서 정수로 변환 시키는 과정 ex.) a를 1 로변환 시키는 과정 (숫자로 관리하면 편하기 때문에) steps =[(2,1),(2,-1),(-2,1),(-2,-1),(1,2),(1,-2),(-1,2),(-1,-2)]
result = 0
for step in steps:
next_row = row + step[0]
next_colum = column + step[1]
# 해당 위치로 이동이 가능하다면 카운트 증가 좌표가 1 ~ 8까지밖에없음
if next_row >=1 and next_colum >=1 and next_row <= 8 and next_colum <= 8 :
result+=1
print(result)
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# 2차원 리스트를 초기화할 때 매우 효과적으로 사용되는 리스트 컴프리헨션
# N X M 크기의 2차원 리스트 초기화
# n =3
# m =4
# array = [[m]*m for _ in range(n)]
# print(array)
# N, M을 공백으로 구분하여 입력받기
n,m = map(int, input().split())
# 방문한 위치를 저장하기 위한 맵을 생성하여 0으로 초기화
d = [[0]*m for _ in range(n)]
# 현재 캐릭터의 X 좌표, Y 좌표, 방향을 입력받기
x,y,direction =map(int,input().split())
d[x][y] = 1 # 현재 좌표 방문 처리
# 전체 맵 정보를 입력받기
array = []
for i in range(n):
array.append(list(map(int,input().split())))
# 북, 동, 남, 서 방향 정의
dx = [-1,0,1,0]
dy = [0,1,0,-1]
#왼쪽으로 회전
def turn_left():
global direction
direction -=1
if direction == -1:
direction = 3
# 시뮬레이션 시작
count = 1
turn_time = 0
while True:
# 왼쪽으로 회전
turn_left()
nx = x+dx[direction]
ny = y+dy[direction]
# 회전한 이후 정면에 가보지 않은 칸이 존재하는 경우 이동
if d[nx][ny] == 0 and array[nx][ny] == 0:
d[nx][ny] =1
x = nx
y = ny
count +=1
turn_time = 0
continue
# 회전한 이후 정면에 가보지 않은 칸이 없거나 바다인 경우
else :
turn_time +=1
# 네방향 모두 갈수 없는 경우
if turn_time == 4:
nx = x-dx[direction]
ny = y-dy[direction]
if array[nx][ny] ==0:
x = nx
y = ny
# 뒤가 바다로 막혀있는 경우
else:
break
turn_time =0
print(count)
|
cs |
'알고리즘 문제 > 자료구조&알고리즘' 카테고리의 다른 글
정렬 예제 (0) | 2020.10.22 |
---|---|
정렬 (0) | 2020.10.21 |
DFS/BFS 예제 (0) | 2020.10.21 |
DFS(Depth First Search)/BFC(Breadth First Search) (0) | 2020.10.21 |
그리디 (0) | 2020.10.19 |