Open hojongs opened 1 year ago
시간 제한은 6초이고 수행 시간이 13초인데 통과한 게 이상함 (보정이 너무 심한듯) 나중에 Python 말고 Go로 풀어보자 (동일한 알고리즘을)
https://velog.io/@kms9887/BOJ-9019-DSLR
아래 코드와 시간 차이가 크게 나는 이유는?
https://chelseashin.tistory.com/64
from sys import stdin
input = stdin.readline
from collections import deque
def bfs(start, end):
Q = deque([(start, '')])
visited = [0] * 10000
visited[start] = 1
while Q:
num, temp = Q.popleft()
if num == end: # 목표 숫자에 도달하면 리턴
return temp
# D
if not visited[num*2 % 10000]:
visited[num*2 % 10000] = 1
Q.append((num*2 % 10000, temp+"D"))
# S
if not visited[(num-1) % 10000]:
visited[(num-1) % 10000] = 1
Q.append(((num-1) % 10000, temp+"S"))
# L
if not visited[num % 1000 * 10 + num//1000]:
visited[num % 1000*10 + num//1000] = 1
Q.append((num % 1000*10 + num//1000, temp+"L"))
# R
if not visited[num % 10*1000 + num//10]:
visited[num % 10*1000 + num//10] = 1
Q.append((num % 10*1000 + num//10, temp+"R"))
# main
T = int(input())
for _ in range(T):
A, B = map(int, input().split())
print(bfs(A, B))
Problem link
https://www.acmicpc.net/problem/9019
Problem abstraction
BFS, Queue D: Double S: Subtraction L: Left shift R: Right shift
A -> B로 가는 최소 명령어 배열
Design(Plan) algorithm
Algorithm idea
최단거리를 탐색하기 위해 BFS. 불필요한 탐색을 줄이기 위한 아이디어는 모르겠다
Pseudo-code
Validate algorithm
Impl
Self-feedback
구조적 접근: 문제를 추상화하여 구조적으로 접근했는가?
사고력: 알고리즘을 완전히 이해했는가? (충분한 사고력을 가졌는가?)
https://velog.io/@kms9887/BOJ-9019-DSLR
시간 최적화를 위한 DP 아이디어? 여러 가지 테스트 케이스를 실행하므로 활용할 수 있다
f(num, cmd)의 결과는 모든 테스트 케이스에 대하여 동일하다
구현력: 알고리즘을 신속, 정확하게 구현했는가?
실패 코드의 원인
list + list 연산은 str + str의 연산보다 더 느렸다
https://stackoverflow.com/a/64381688/12956829
https://stackoverflow.com/a/37133870/12956829
str concatenation (
str1 + str2
)도 time complexity는 O(n)으로 동일하지만, list의 연산값이 더 큰 듯하다