강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của asss
asss

câu hỏi đã được viết

Giới thiệu về giải bài toán bằng thuật toán Python (chuẩn bị cho bài kiểm tra viết mã)

섹션 3 탐색&시뮬레이션- 10 스도쿠 문제 질문입니다.

Đã giải quyết

Viết

·

423

0

4중 for문을 하기 싫어서  체크리스트를 3중 리스트로 만들어서 풀었습니다.

3중 리스트 요소를 모두 더하고 싶습니다,

넘파이나 itertools를 사용하면 되긴 하는데 코딩 시험이라 사용을 못할수 있을꺼 같아서

기본적으로 2중~ 다중리스트 sum을 하는 방법이 sum(2중 리스트, []) 이런 방법으로 1차원 리스트로 풀어서 합하는 방법말고는 없나요? 검색해도 잘 안나오네요 

python코테 준비 같이 해요!

Câu trả lời 3

1

codingcamp님의 프로필 이미지
codingcamp
Người chia sẻ kiến thức

다중리스트의 모든 합을 한번에 구해주는 함수가 존재하는지 저도 모르겠습니다. 죄송합니다.

저 같았으면 이렇게 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

codingcamp님의 프로필 이미지
codingcamp
Người chia sẻ kiến thức

채점데이터 수정해 놓았습니다. 1번 데이터에서 위에 코드가 통과되지 않을 겁니다.

0

asss님의 프로필 이미지
asss
Người đặt câu hỏi

3차원 리스트 만드는거 정말 나중에 시험 볼때 실수를 할뻔 했습니다. 감사합니다.

혹시 테스트 케이스 추가가 나중에 가능하시다면 하나 더 추가하면 좋을꺼 같습니다.

잘못된 방법으로 만든 3차원 리스트로  테스트 케이스가 모두 통과가 되었네요.

Hình ảnh hồ sơ của asss
asss

câu hỏi đã được viết

Đặt câu hỏi