@Eeap
velog
@Eeap
전체 방문자
오늘
어제
  • 전체 (168)
    • osam (1)
    • Cloud (21)
      • Docker (2)
      • AWS (13)
    • AI & Data (7)
    • Algorithm (76)
      • Baekjoon (75)
      • Codeforces (1)
    • Language (18)
      • Java (18)
    • Back-end (17)
      • Spring (3)
      • JSP & Servlet (12)
      • Go (2)
    • 일상 (4)
    • 기타 (8)
    • git (1)
    • Infra (9)
      • Apache Kafka (5)
      • Kubernetes (4)
      • 기타 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • AWS CodeCatalyst
  • 오블완
  • Python
  • 티스토리챌린지
  • Agent
  • bedrock agent
  • converse api
  • sagemaker unified studio
  • AWS CodeStar
  • flink
  • bedrock api
  • AWS CodeArtifact
  • SageMaker
  • bedrock
  • 인터페이스
  • CLASS
  • invokemodel api
  • knowledge bases
  • 심폴릭링크
  • java

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
@Eeap

velog

Algorithm/Baekjoon

5014번 파이썬

2022. 3. 21. 20:22
반응형

처음에 조금 많이 틀려서 문제가 없는데 뭐가 문제인지 찾아봤다.

아무래도 처음 층을 방문 처리를 안해줘서 처음 층으로 돌아왔을 때 문제가 되는 것 같다. for 문도 문제가 되는 것 같아서 if로 바꿔서 했더니 잘됐다.

 

import sys
from collections import deque
input = sys.stdin.readline

f,s,g,u,d = map(int, input().split())
def bfs(s,f):
    queue = deque([s])
    count = [0]*(f+1)
    count[s]=1
    while queue:
        floor = queue.popleft()
        if floor == g:
            print(count[g]-1)
            return
        if (floor+u)<=f and not count[floor+u]:
            count[floor+u] = count[floor] + 1
            queue.append(floor+u)
        if (floor-d)>0 and not count[floor-d]:
            count[floor-d] = count[floor] + 1
            queue.append(floor-d)
    print('use the stairs')
    return
    
bfs(s,f)

 

전에 풀었던 방식을 앞 방식을 조금 참고해서 풀었더니 이상없이 잘 풀렸다. 아무래도 처음에 했을 때 처음부터 도착층일 때 고려 안한거랑 처음 층으로 다시 돌아왔을 때의 경우를 고려하지 않아서 틀린 것 같다.

참고로 아래 방식이 시간이 거의 3분의 1정도 줄었지만 메모리 값이 늘었다! 시간을 줄일땐 아래가 효과적인 것 같다.

import sys
from collections import deque
input = sys.stdin.readline

f,s,g,u,d = map(int, input().split())
def bfs(s,f):
    queue = deque([s])
    count = [0]*(f+2)
    found=False
    count[s+1]=1
    while queue:
        floor = queue.popleft()
        if floor == g:
            found=True
            break
        for num in (u,-d):
           if 0<(floor+num)<=f and not count[floor+num+1]:
                count[floor+num+1] = count[floor+1] + 1
                queue.append(floor+num)
    if found:
        print(count[g+1]-1)
    else:
        print('use the stairs')
    
bfs(s,f)

 

 

 

 

 

반응형
저작자표시 (새창열림)

'Algorithm > Baekjoon' 카테고리의 다른 글

2579번 파이썬  (0) 2022.03.26
2108번 파이썬  (0) 2022.03.26
1697번 파이썬  (0) 2022.03.20
7569번 파이썬  (0) 2022.03.20
2644번 파이썬  (0) 2022.03.20
    'Algorithm/Baekjoon' 카테고리의 다른 글
    • 2579번 파이썬
    • 2108번 파이썬
    • 1697번 파이썬
    • 7569번 파이썬
    @Eeap
    @Eeap

    티스토리툴바