달팽이 너같은거...

2024. 10. 9. 00:32·coding test - python/Code Tree
728x90
반응형

오늘은 달팽이 같은 유형을 코드와 함께 다뤄볼 것이다.

시험장에 처음본다면 당황할만하지만, 한번 맛보고 가면 당황스럽지 않다.

1. 달팽이 모양으로 들어가기 

BFS 처럼 들어가는 방향을 만들어주고 해당 방향으로 쭉 내려가다가 인덱스 오류가 난다면 방향을 틀어준다.

from collections import deque
# 하 우 상 좌 반복
N = int(input())
direction = ((1,0),(0,1),(-1,0),(0,-1))
maps = [[-1] * N for i in range(N)]
queue = deque([[0,0,0]])
while queue:
    qx, qy, qd = queue.popleft()

    d = qd % 4
    maps[qx][qy] = qd
    xx, yy = qx + direction[d][0], qy + direction[d][1]
    if 0 <= xx < N and 0 <= yy < N and maps[xx][yy] == -1:
        queue.append([xx, yy,qd])
    else:
        d = (qd + 1) % 4
        dx, dy = direction[d][0], direction[d][1]
        if 0 <= qx + dx < N and 0 <= qy + dy < N and maps[qx + dx][qy + dy] == -1:
            queue.append([qx + dx, qy + dy, qd + 1])

for i in maps:
    print(i)

direction = ((1,0),(0,1),(-1,0),(0,-1)) 하 우 상 좌  방향으로 반복됨

 

만약 내려가야하는 로직이 있을때 maps[i][j] % 4 방향으로 이동하면 달팽이 모양으로 말려 들어가면서 이동하게 된다


음 이렇게만 구현했다면 0점이다.

 

가라는 방향대로 가다보면 인덱스를 벗어난다.

즉, 인덱스를 벗어날때 한번 더 처리를 해줘야함

조건절에 아래 부분을 추가한 것이다.

if 0 <= qx + dx < N and 0 <= qy + dy < N and maps[qx + dx][qy + dy] == -1:
            maps[qx][qy] = qd+1 # 방향 바뀌면 처리
            queue.append([qx + dx, qy + dy, qd + 1])

 

최종코드

from collections import deque
# 하 우 상 좌 반복
N = int(input())
direction = ((1,0),(0,1),(-1,0),(0,-1))
maps = [[-1] * N for i in range(N)]
queue = deque([[0,0,0]])
while queue:
    qx, qy, qd = queue.popleft()

    d = qd % 4
    maps[qx][qy] = qd
    xx, yy = qx + direction[d][0], qy + direction[d][1]
    if 0 <= xx < N and 0 <= yy < N and maps[xx][yy] == -1:
        queue.append([xx, yy,qd])
    else:
        d = (qd + 1) % 4
        dx, dy = direction[d][0], direction[d][1]
        if 0 <= qx + dx < N and 0 <= qy + dy < N and maps[qx + dx][qy + dy] == -1:
            maps[qx][qy] = qd+1 # 방향 바뀌면 처리
            queue.append([qx + dx, qy + dy, qd + 1])

for i in maps:
    print(i)

 

굳~

이제 아무생각없이 가라는 대로 가기만 하면 방향이 보인다.

 

더보기

그럼 정 중앙에서 반대로 탈출하고 싶다면 어떻게 해야할까?

 

0,1,2,3 -> 하 우 상 좌

0,1,2,3 -> 상 우 하 좌

 

로 바꿔주면 된다.

그럼 어떻게 바꿔주면 될까

direction을 바꾸면 된다.

direction = ((-1,0),(0,1),(1,0),(0,-1))

아마도..? 이건 내 뇌피셜 ㅋ

 

출처 - 코드트리 술래잡기 문제

이런 문제가 있으면 당황하지 않고 술래의 방향을 미리 만들어준다.

내가 만든 달팽이 처럼 말이다..

 


 

728x90
반응형

'coding test - python > Code Tree' 카테고리의 다른 글

삼성 SW역량테스트 기출 / 2022 하반기 오후 1번 문제 코드트리 빵 / Python 파이썬  (5) 2024.10.11
삼성 SW역량테스트 기출 / 2023 상반기 오후 1번 문제 메이즈러너 - 회전, BFS, 가장 작은 정사각형 찾고 회전 / Python 파이썬  (4) 2024.10.09
삼성 SW역량테스트 기출 / 2023 상반기 오전 1번 문제 포탑부수기 - BFS (조건문 확인 계속하기) / Python 파이썬  (13) 2024.10.08
삼성 SW역량테스트 기출 / 2024 상반기 오전 1번 문제 고대 문명 유적 탐사 - 얕은복사, 깊은 복사 / Python 파이썬  (8) 2024.10.05
삼성 SW역량테스트 기출 / 2024 상반기 오후 1번 문제 마법의 숲 탐색 - 회전하면서 하강 / Python 파이썬  (0) 2024.10.02
'coding test - python/Code Tree' 카테고리의 다른 글
  • 삼성 SW역량테스트 기출 / 2022 하반기 오후 1번 문제 코드트리 빵 / Python 파이썬
  • 삼성 SW역량테스트 기출 / 2023 상반기 오후 1번 문제 메이즈러너 - 회전, BFS, 가장 작은 정사각형 찾고 회전 / Python 파이썬
  • 삼성 SW역량테스트 기출 / 2023 상반기 오전 1번 문제 포탑부수기 - BFS (조건문 확인 계속하기) / Python 파이썬
  • 삼성 SW역량테스트 기출 / 2024 상반기 오전 1번 문제 고대 문명 유적 탐사 - 얕은복사, 깊은 복사 / Python 파이썬
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    소수
    programmers
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
달팽이 너같은거...
상단으로

티스토리툴바