Carnival7
Change Developer
Carnival7
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자바의 정석
    • 프로그래밍 언어별 tools
      • 파이썬
      • 자바
    • 코딩 테스트
      • 백준 강의 기초편
      • 백준 강의 연습편
      • 백준 강의 문제편
      • 삼성 기출
      • 백준 - 일반
      • 카카오 기출
      • 프로그래머스 - 일반
      • 코테 풀이 Tools
    • CS
      • Network
      • 운영체제
      • 알고리즘
      • DB
    • Web_Backend
      • Spring
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
      • 스프링 핵심 원리 - 기본편
    • DevOps
    • IT 업무 지식
      • 인프라
      • 클라우드
    • 자격증
      • AWS - CLF
      • 정처기 - 실기
    • 생각 정리

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 삼성기출 #백준강의문제편
  • DMZ
  • nginx
  • 스프링 #AOP
  • 코딩테스트 #삼성기출 #구현 #시뮬레이션
  • 알고리즘 #백준강의기초편 #코딩테스트
  • ci/cd
  • Github Actions
  • 삼성기출 #2023 #상반기
  • 슬라이딩 윈도우
  • 스프링 부트 무중단 웹 서비스
  • code deploy
  • 프로그래머스 #카카오기출 #레벨2
  • 스프링 #인터셉터 #AOP #필터
  • 슬라이딩 윈도우 #덱
  • DevOps

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7

Change Developer

코딩 테스트/삼성 기출

구현) 3190. 뱀

2021. 9. 15. 15:39

문제 : https://www.acmicpc.net/problem/3190

 

3190번: 뱀

 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임

www.acmicpc.net

# 21/09/15 피드백

1. 맵 정보가 1~n인 것을 감안

2. 큐 자료구조 활용

3. 맵 정보와 함께 종료 조건 세밀하게 조정

 

 

# 풀이 1번 ( 21/06/12 )

n = int(input())
k = int(input())
data = [[0] * (n + 1) for _ in range(n + 1)] # 맵 정보
info = [] # 방향 회전 정보

# 맵 정보(사과 있는 곳은 1로 표시)
for _ in range(k):
    a, b = map(int, input().split())
    data[a][b] = 1

# 방향 회전 정보 입력
l = int(input())
for _ in range(l):
    x, c = input().split()
    info.append((int(x), c))

# 처음에는 오른쪽을 보고 있으므로(동, 남, 서, 북)
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]

def turn(direction, c):
    if c == "L":
        direction = (direction - 1) % 4
    else:
        direction = (direction + 1) % 4
    return direction

def simulate():
    x, y = 1, 1 # 뱀의 머리 위치
    data[x][y] = 2 # 뱀이 존재하는 위치는 2로 표시
    direction = 0 # 처음에는 동쪽을 보고 있음
    time = 0 # 시작한 뒤에 지난 '초' 시간
    index = 0 # 다음에 회전할 정보
    q = [(x, y)] # 뱀이 차지하고 있는 위치 정보(꼬리가 앞쪽)

    while True:
        nx = x + dx[direction]
        ny = y + dy[direction]
        # 맵 범위 안에 있고, 뱀의 몸통이 없는 위치라면
        if 1 <= nx and nx <= n and 1 <= ny and ny <= n and data[nx][ny] != 2:
            # 사과가 없다면 이동 후에 꼬리 제거
            if data[nx][ny] == 0:
                data[nx][ny] = 2
                q.append((nx, ny))
                px, py = q.pop(0)
                data[px][py] = 0
            # 사과가 있다면 이동 후에 꼬리 그대로 두기
            if data[nx][ny] == 1:
                data[nx][ny] = 2
                q.append((nx, ny))
        # 벽이나 뱀의 몸통과 부딪혔다면
        else:
            time += 1
            break
        x, y = nx, ny # 다음 위치로 머리를 이동
        time += 1
        if index < l and time == info[index][0]: # 회전할 시간인 경우 회전
            direction = turn(direction, info[index][1])
            index += 1
    return time

print(simulate())

# 풀이 2번 (21/09/15)

# 피드백
# 1.

n=int(input())
a=[[0] * (n+1) for _ in range(n+1)]
k=int(input())

for _ in range(k):
    x,y = map(int,input().split())
    a[x][y] = 1

l=int(input())

changes = []

for _ in range(l):
    x,c = input().split()
    changes.append((int(x),c))

# 오른쪽, 아래, 왼쪽, 위
dx = [0,1,0,-1]
dy = [1,0,-1,0]

# 처음엔 오른쪽
direction = 0

#뱀.
# 현재 머리 위치
x,y=1,1
a[x][y] =2
# 전체 위치
q=[(x,y)]
s=0

while True:
    s+=1
    # 다음 머리 위치
    nx = x+dx[direction]
    ny = y+dy[direction]
    # 종료 조건
    if nx > n or nx < 1 or ny > n or ny < 1:
        print(s)
        break
    if a[nx][ny] == 2:
        print(s)
        break
    else:
        # 규칙 1,2번
        if a[nx][ny] == 1:
            a[nx][ny]=2
            q.append((nx,ny))
        # 규칙 1,3번
        elif a[nx][ny] == 0:
            a[nx][ny] = 2
            q.append((nx, ny))
            px,py = q.pop(0)
            a[px][py] = 0
    #다음 머리 위치로 현재 머리위치 조정
    x,y = nx,ny
    # 방향 전환 체크
    for sec,c in changes:
        if sec==s:
            if c=='D':
                direction = (direction+1)%4
            elif c=='L':
                if direction == 0:
                    direction=4
                direction -= 1

 

'코딩 테스트 > 삼성 기출' 카테고리의 다른 글

2022하_코드트리 빵  (0) 2023.03.29
2022하_싸움땅(2024/04/06 업데이트)  (0) 2023.03.29
브루트포스) 17070.파이프 옮기기 1  (0) 2022.10.03
시뮬레이션과 구현) 20057.마법사 상어와 토네이도  (0) 2022.10.01
구현/시뮬레이션) 17822.원판 돌리기  (0) 2022.04.05
    '코딩 테스트/삼성 기출' 카테고리의 다른 글
    • 2022하_싸움땅(2024/04/06 업데이트)
    • 브루트포스) 17070.파이프 옮기기 1
    • 시뮬레이션과 구현) 20057.마법사 상어와 토네이도
    • 구현/시뮬레이션) 17822.원판 돌리기
    Carnival7
    Carnival7

    티스토리툴바