[프로그래머스] 아이템 줍기 -python

2024. 8. 6. 14:55·코딩테스트/프로그래머스

문제

 

 

 

 

 

문제를 접하고서 경로를 찾는 것 자체는 최단경로 찾을 때처럼 해결해주면 될 것같은데 주어진 직사각형의 테두리만 따라서 경로를 찾아주는 것이 구현하기 너무 까다롭다는 생각이 들었다.

 

 

 

그리고 결국 이 부분은 구글링을 통해 도움을 얻었다.

 

이 부분을 해결할 때 크게 3가지의 단계가 필요하다

 

1. 사각형 내부에 포함되는 부분은 0으로 처리

2. 경계선에 해당되는 부분은 1로 처리

3. 좌표를 2배로 키워준다 (왜냐하면 ㄷ 자와 같은 형태의 경로를 탐색할때 ㅁ으로 인식될 수 있으므로 이를 방지하고자 좌표의 크기를 2배로 키워줌)

 

 

이 3가지 단계를 적용한 코드는

 

 

from collections import deque

def solution(rectangle, characterX, characterY, itemX, itemY):
    answer = 0
    #범위가 50까지인데 2배할 예정이므로 102
    field = [[-1] * 102 for _ in range(102)]
    
    for r in rectangle:
        x1,y1,x2,y2 = map(lambda x:x*2, r)
        for i in range(x1,x2+1):
            for j in range(y1, y2+1):
                #사각형 내부에 해당되는 부분
                if x1< i <x2 and y1< j < y2:
                    field[i][j] = 0
                #현재 사각형의 경계선이면서 다른 사각형의 내부가 아닌 부분 1로처리 
                elif field[i][j] != 0:
                    field[i][j] = 1
    q = deque()
    q.append((characterX*2, characterY*2))
    visited = [[1] * 102 for _ in range(102)]
    visited[characterX*2][characterY*2] = 0
    dx = [-1,1,0,0]
    dy = [0,0,-1,1]
    while(q):
        x,y = q.popleft()
        if x == itemX*2 and y == itemY*2:
            #정답은 2로 나누어 반환
            answer = visited[x][y]//2
            break
            
        for i in range(4):
            nx = dx[i] + x
            ny = dy[i] + y
            if field[nx][ny] == 1 and visited[nx][ny] == 1:
                q.append((nx,ny))
                visited[nx][ny] = visited[x][y] + 1
    
    return answer

 

 

 

 

이렇게 된다.

 

사각형의 테두리에 해당되는 부분에서만 경로를 찾는 걸 구현하는 부분이 너무 어려웠던 문제이다.

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 구명보트 - python파이썬  (1) 2024.08.21
[프로그래머스] 여행경로 -python 파이썬  (1) 2024.08.06
[프로그래머스] 단어변환 - python 파이썬  (2) 2024.08.01
[프로그래머스] N으로 표현 -python 파이썬  (1) 2024.07.25
[프로그래머스] 더맵게 - python파이썬  (1) 2024.07.25
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 구명보트 - python파이썬
  • [프로그래머스] 여행경로 -python 파이썬
  • [프로그래머스] 단어변환 - python 파이썬
  • [프로그래머스] N으로 표현 -python 파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    K디지털트레이닝
    EC2
    프로디지털아카데미
    코테
    kdt교육
    깃허브
    프디아
    그리디
    투포인터
    다익스트라
    AWS
    코딩테스트
    python
    백준
    백트래킹
    알고리즘
    알파코
    IT기획
    BFS
    UnionFind
    백엔드
    Java
    github
    bastion host
    알파코캠퍼스
    MSA
    프로그래머스
    spring
    신한투자증권
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[프로그래머스] 아이템 줍기 -python
상단으로

티스토리툴바