Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- S3
- yolov5
- 페이지네이션
- Java
- 멋사
- jwt
- CRUD
- 파이썬
- Python
- 피로그래밍
- 백준
- nodejs
- 카카오
- 솝트
- 절차지향
- 서류전형
- AWS
- 파이썬 #백준 #BFS
- MongoDB
- 면접전형
- jQuery
- 솝트 후기
- EC2
- 사물인식
- 합격후기
- spring-boot
- 프로그래머스
- 멋쟁이사자처럼
- 인공지능
- objectdetection
Archives
- Today
- Total
찔끔찔끔씩😎
[백준] 3190번 뱀 - python (삼성 sw 기출) 본문
728x90
https://www.acmicpc.net/problem/3190
문제
사과를 만나면 길이 +1, 아니면 그대로
벽이나 몸에 닿으면 게임 끝
해결
empty : 0 , 뱀 위치 : 1, 사과 위치 : 2
머리가 갈 곳을 계속 1로 만들며 snake 배열에 append 해준다.
만약 사과가 없다면,
길이를 유지 해주어야 하기 때문에 머리 위치를 append 함과 동시에 꼬리 위치를 pop 해준다. (= 길이 그대로 )
시간과 방향은 0으로 초기화된 times 배열에 넣어주고
방향을 바꾸어야할 시간 인덱스에 방향을 넣어준다.
ex) 15초 뒤 L 로 방향전환 -> times[15] = L
코드
n = int(input())
board = [[0]*n for _ in range (n)] # empty : 0
k = int(input())
for _ in range (k):
x,y = map(int,input().split())
board[x-1][y-1] = 2 # 사과 위치: 2
l = int(input())
times = [0]*10000
for _ in range(l):
when, dir = input().split()
times[int(when)] = dir
snake = []
snake.append([0,0])
board[0][0] = 1 # 뱀 위치: 1
dx = [-1,0,1,0]
dy = [0,1,0,-1]
dir = 1 # 동쪽 바라보고 시작
nx, ny = 0 , 0 # (0,0) 에서 시작
time = 0
while(True):
time += 1
nx = nx + dx[dir]
ny = ny + dy[dir]
if ( nx<0 or nx>=n or ny<0 or ny>=n or board[nx][ny]==1): # 벽이나, 몸에 닿으면
break
if ( board[nx][ny] ==2 ): # 사과 있으면
snake.append([nx,ny])
board[nx][ny] = 1
elif ( board[nx][ny] == 0): # 사과 없으면
snake.append([nx,ny])
board[nx][ny] = 1
delX,delY = snake.pop(0)
board[delX][delY] = 0
if ( times[time] == 'D'): # 방향 전환해야할 시간이면
dir = ( dir+1 )%4
elif ( times[time] == 'L'):
dir = ( dir+3 )%4
print(time)
'Algorithm > 백준' 카테고리의 다른 글
[백준] 1018번 체스판 다시 칠하기- python (0) | 2021.11.13 |
---|---|
[백준] 7568번 덩치- python (0) | 2021.11.13 |
[백준] 2231번 분해합- python (0) | 2021.11.11 |
[백준] 2798번 블랙잭 - python (0) | 2021.11.11 |
[백준] 15686번 치킨 배달 - python (0) | 2021.11.10 |
Comments