곳감 문제 시간복잡도에 관해서
282
작성한 질문수 2
이 문제를 시간복잡도를 생각해서 다르게 풀었는데 그 판단이 맞는지 질문드립니다.
우선 저의 코드는 다음과 같습니다.
def solution():
# setting
sys.stdin = open('problem_8.txt', 'rt')
# inputs
n = int(input())
area: List[List[int]] = [list(map(int, input().split())) for _ in range(n)]
m = int(input())
rotations: List[List[int]] = [list(map(int, input().split())) for _ in range(m)]
# process
for rotation in rotations:
row_num: int = rotation[0]
direction: int = rotation[1]
step = rotation[2]
row = area[row_num - 1]
step = step if direction == 0 else -step
left = row[step:]
right = row[:step]
area[row_num - 1] = left + right
deviation: int = 0
summation: int = 0
for row_num in range(n):
for column_num in range(0 + deviation, n - deviation): # 04 13 22
summation += area[row_num][column_num]
if row_num < n // 2:
deviation += 1
else:
deviation -= 1
# output
print(summation)
TimeCounterRunner(solution).run()저는 슬라이싱 기능을 이용해서 했는데 이렇게 한 이유는 리스트의 pop에 파라미터를 안넘기면 시간복잡도가 1이지만 제가 알기로 파라미터가 있는 경우 N이 되는 것으로 알고 있습니다.
거기에 추가로 pop은 루프를 돌면서 해야하기 때문에 N^2가 된다고 생각했습니다.
거기에 회전 숫자가 1인 경우에는 insert를 써야하는데 이것도 시간복잡도가 N으로 되는 것으로 알고 있었습니다.
그러면 어림잡아서 시간복잡도가 라인도 읽어야 하니까 N^3이 되는 것 같아서 저같은 경우 위에처럼 하면
슬라이싱에서 N이고 리스트를 더하는 것이 제가 알기론 시간복잡도가 N이긴 하지만 중첩으로 가지 않아서 N^2로 끝날 수 있을 것 같았는데 맞는 판단인지 알고 싶습니다.
답변 1
0
안녕하세요^^
네. pop(0)을 하면 맨 앞에 자료가 제거되고 그 뒤에 것들이 하나씩 앞으로 당겨지므로 O(n)이 맞습니다.
N제한이 20정도라서 그냥 pop(0)을 사용했습니다. 시간복잡도를 생각하면서 더 좋은 코드를 짜려고 노력하는 모습이 좋아보입니다. 잘 하셨습니다.
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
1
79
2
스택에서 ')'을 만나는 경우
0
81
3
문제가 어디있나요?
0
68
2
변수 or 함수명
0
63
1
침몰하는 타이타닉 문제 질문입니다
0
60
1
AA.py 책점 에러
0
60
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
112
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
118
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
161
2
문제 링크가있나여?
0
148
2
채점기 Time Limit Exceeded 오류 문의
1
166
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
95
0
5번 틀림
0
115
0
오류원인?
0
99
0
리스트 선언
0
108
1
침몰하는 타이타닉(그리디) 문제 질문
0
112
1
알고리즘
0
70
1
코딩테스트
0
93
1
DFS 순서 질문드립니다.
0
130
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





