본문 바로가기
알고리즘

구현

by Rudy 2021. 7. 5.

1. 상하좌우

# 상하좌우

#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)

 

2. 시각

#시각

#H를 입력받는다.(시간)
h=int(input())

count=0
for i in range(h+1):
  for j in range(60):
    for k in range(60):
      #매 시각 안에 3이 포함되어 있으면 카운트값 증가
      if '3' in str(i)+str(j)+str(k):
        count+=1

print(count)

 

3. 왕실의 나이트

#왕실의 나이트

#현재 나이트의 위치 입력받기
input_data=input()
row=int(input_data[1])
column=int(ord(input_data[0]))-int(ord('a'))+1
#ord는 문자의 유니코드 값을 반환

#나이트가 이동할 수 있는 8가지 방향을 정의한다.
steps=[(-2,-1),(-1,-2),(1,-2),(2,-1),(2,1),(1,2),(-1,2),(-2,1)]

#8가지 방향에 대하여 각 위치로 이동이 가능한지 확인한다.
result=0
for step in steps:
  #이동하고자 하는 위치를 확인한다.
  next_row=row+step[0]
  next_column=column+step[1]
  #해당 위치로 이동이 가능하다면 카운트 값을 증가
  if next_row>=1 and next_row<=8 and next_column>=1 and next_column<=8:
    result+=1

print(result)

 

4. 게임 개발

#게임 개발

#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())))
  #append()함수는 리스트의 맨 마지막에 ()안에 있는 요소를 덧 붙이는 함수이다.

  #북, 동, 남, 서 방향 정의
  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)

 

'알고리즘' 카테고리의 다른 글

프로그래머스-폰켓몬  (0) 2022.05.26
프로그래머스-신규 아이디 추천  (0) 2022.05.25
[프로그래머스] 로또의 최고 순위와 최저 순위  (0) 2022.05.17
DFS/BFS  (0) 2021.07.06
코테 공부- 그리디 알고리즘  (0) 2021.07.03

댓글