본문 바로가기
알고리즘 문제/자료구조&알고리즘

구현

by 태윤2 2020. 10. 19.

상하좌우(좌표문제는 표를한번그려보자 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 입력받기
= int(input())
x, y = 11
plans = input().split()
 
# L, R, U, D에 따른 이동 방향
dx = [00-11]
dy = [-1100]
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
# 시각
 
= 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으로 초기화
= [[0]*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