본문 바로가기

컴맹탈출기/Python을 파보자

파이썬 이차원 배열 선언과 동시에 초기화 할 때 유의할 점

아직 초보라 틀린 내용이 있을 수 있으니 스뭇스하게 알려주시면 감사합니다 ㅠㅠ

 

파이썬에서 빠르게 배열을 선언할 때, 

[0]*N <- 이 방법을 주로 애용했었다

이 경우 톱니바퀴형 이차원 배열 (열의 크기가 제각각인 이차원 배열) 을 만들고자 했기에 이렇게 선언했다.

 

선언 완료

그런데 이렇게 선언했을 때의 문제점을 찾았다.

정수형 배열안에 있는 수인 x를 10으로 나머지 연산한 인덱스에 해당 x 를 넣고 싶었다.

 

 즉, 

이런 연산을 수행하고 싶었다.

 

만약 x가 1,2,3,4,5 일 때 

[[0],[0,1],[0,2],[0,3],[0,4],[0,5]] <-이렇게 나오길 바랐으나, 결과는,...

이렇게 한번에 다같이 추가되는 것이 아닌가!

 아마 처음에 다같이 0으로 한번에 선언해준 것이 각 행을 같은 원소로 인식하도록 한 것 같다 (궁예)

이것 때문에 브루트포스 같은 알고리즘을 풀 때 앨르 많이 먹었다.

 

이 문제를 해결하기 위해 buckets 의 선언 방식을 바꾸어 주었다.

이렇게 한 원소씩 추가해 주는 방식을 쓰거나

그냥 한번에 이렇게 선언하면 됐었다 ㅋㅋㅋ이렇게 간단한 문제로 시간을 낭비하다니 ㅠㅠㅠㅠㅠ

[0]*N 으로 배열 선언할 때 항상 주의하자!