섹션 3 탐색&시뮬레이션- 10 스도쿠 문제 질문입니다.
4중 for문을 하기 싫어서 체크리스트를 3중 리스트로 만들어서 풀었습니다.
3중 리스트 요소를 모두 더하고 싶습니다,
넘파이나 itertools를 사용하면 되긴 하는데 코딩 시험이라 사용을 못할수 있을꺼 같아서
기본적으로 2중~ 다중리스트 sum을 하는 방법이 sum(2중 리스트, []) 이런 방법으로 1차원 리스트로 풀어서 합하는 방법말고는 없나요? 검색해도 잘 안나오네요
답변 3
1
다중리스트의 모든 합을 한번에 구해주는 함수가 존재하는지 저도 모르겠습니다. 죄송합니다.
저 같았으면 이렇게 sum([sum(ch3[i][j]) for i in range(3) for j in range(3)]) 리스트 컴프리헨션을 썼을 것 같습니다.
sum 함수를 이용해 다중리스트를 1차원 리스트화 하는 법은 이정민님을 통해 처음 알았습니다. 둘의 수행시간을 아래 코드로 측정해보니 sum으로 1차원화 해서 더하는게 조금 더 좋습니다.
import time
def Test():
ans=0
for i in range(100000):
ch3[2][2][0]=i
#ans+=sum(sum(sum(ch3, []), []))
ans+=sum([sum(ch3[i][j]) for i in range(3) for j in range(3)])
return ans
if __name__=="__main__":
ch3=[[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]],
[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]],
[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]]]
start = time.time()
print(Test())
end = time.time()
print("Time: {} sec".format(end-start))
참고로 3차원 리스트를 ch_m=[[[0]*9]*3]*3 처럼 하면 [0]*9라는 동일 객체가 9번 복사되는 것입니다. 이렇게 생성하면 ch_m[0][0][0]=1을 하면 9개의 모든 0번 인덱스에 1이 기록됩니다.
3차원 리스트 생성은 ch_m=[[[0]*9 for _ in range(3)] for _ in range(3)] 처럼 해야 합니다.
0
3차원 리스트 만드는거 정말 나중에 시험 볼때 실수를 할뻔 했습니다. 감사합니다.
혹시 테스트 케이스 추가가 나중에 가능하시다면 하나 더 추가하면 좋을꺼 같습니다.
잘못된 방법으로 만든 3차원 리스트로 테스트 케이스가 모두 통과가 되었네요.
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
0
76
2
스택에서 ')'을 만나는 경우
0
78
3
문제가 어디있나요?
0
65
2
변수 or 함수명
0
61
1
침몰하는 타이타닉 문제 질문입니다
0
56
1
AA.py 책점 에러
0
57
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
111
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
116
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
160
2
문제 링크가있나여?
0
147
2
채점기 Time Limit Exceeded 오류 문의
1
163
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
93
0
5번 틀림
0
114
0
오류원인?
0
98
0
리스트 선언
0
106
1
침몰하는 타이타닉(그리디) 문제 질문
0
109
1
알고리즘
0
69
1
코딩테스트
0
92
1
DFS 순서 질문드립니다.
0
126
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





