인프런 커뮤니티 질문&답변

pku928님의 프로필 이미지
pku928

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

8. 곳감(모래시계)

pop(0)과 pop() 대신

작성

·

348

0

안녕하세요. 선생님

다름이 아니라 list는 맨 앞에꺼 pop하는 경우 뒤에꺼를 앞으로 다 땡겨와서 시간이 오래 걸린다는 말을 많이 들어서 아래처럼 코드처럼 slicing을 사용했습니다. 아래도 좋아보이지는 않지만 저와 같이 코드 짜는 것보다 선생님처럼 pop과 append 사용하는게 나을까요?

아니면 deque로 변환해서 회전하는 방법도 있을거 같은데 어떤게 나을지 대략적으로 말씀해주실 수 있을까요?

import sys
sys.stdin = open('section3/input.txt''rt')
n = int(input())
graph = [list(map(intinput().split())) for _ in range(n)]
m = int(input())
l = n//2

def count(graph):
    cnt = 0
    for i in range(n):
        if i<=l:
            for j in range(i, n-i):
                cnt += graph[i][j] 
        else:
            for j in range(n-i-1, i+1):
                cnt += graph[i][j]
    return cnt

for _ in range(m):
    a, b, c = map(intinput().split())
    c %= n 
    a -= 1
    if b==0:
        graph[a] = graph[a][c:] + graph[a][:c]
    else:
        graph[a] = graph[a][-c:] + graph[a][:-c]

print(count(graph))

답변 2

0

pku928님의 프로필 이미지
pku928
질문자

답변 감사합니다. ^^

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

이 문제처럼 n제한이 작으면 pop(0)을 써도 되지만 n제한이 큰 경우 deque를 사용하는게 좋습니다.

사실 이 문제를 만든 목적은 2차원에서 pop과 append연습해보고, 2차원배열을 모래시계로 모양 탐색을 연습하려고 만든 문제이지 시간복잡도를 따지려고 하는 그런 문제는 아닙니다. 

pop으로 해서 모든 원소를 당겼을 때 패널티가 주어지는 문제는 2차원으로 문제를 만들것 같지는 않습니다. 그런 문제는 1차원 배열형태로 입력이 주어지는 경우가 많습니다. 그럴 경우 deque를 쓰시면 될 것 같습니다.

pku928님의 프로필 이미지
pku928

작성한 질문수

질문하기