코딩 테스트, 내가 자주 하는 실수 (파이썬)

nnoobbaagguu·2022년 7월 26일
0

알고리즘 공부

목록 보기
1/4

아직은 파이썬에 익숙하지 않다.
C, Java 환경에 익숙한 나지만, 파이썬의 편함을 인정하고 파이썬으로 코딩테스트를 준비하기로 마음먹었기에 자주 하는 실수들을 적어 놓고 극복해보자.

string vs int

보통 입력을 받을 때 map을 통한 형변환을 통해 string을 int로 변환한다.
하지만 띄어쓰기가 없이 입력받은 숫자로 구성된 string을 int로 변환하면 데이터를 처리하기가 힘들다.
예를들면

1 0 1 0 1 0
1 1 1 1 1 1
0 0 0 0 0 1
1 1 1 1 1 1
1 1 1 1 1 1

과 같이 지도 데이터를 입력받았다고 하면, list(map(int, input().split()))으로 지도를 2차원 list로 쉽게 변환이 가능하다.
하지만

101010
111111
000001
111111
111111

알아보니 편한 변환 방법이 있었다. list(map(int, input()))을 사용하면 된다. 주의할 점은 list(int(input()))으로 하면 안 된다. 반드시 각 요소에 함수를 적용시켜주는 map을 이용하자.


(위 방법을 몰랐을 때 쓴 내용입니다.)
과 같이 입력이 들어왔을 때 이 데이터를 2차원 list로 처리하려면, 섣불리 int로 형변환을 하면 안 된다.
len(list[0])을 사용하여 1차원 리스트의 원소의 개수를 파악하여 // 연산을 통해 각각 int로 변환할 순 있겠지만, 매우 번거롭다.
따라서 형변환을 하지 않고 string 객체로 두는 대신에, 각 요소의 값이 0 또는 1이 아닌 '0' 또는 '1'임을 명시하자.

for loop 안에서 list의 remove 사용 금지

프로그래머스의 체육복 문제를 다시 풀다가, 테스트 경우 1에서 계속 오류가 발생했는데 다음과 같은 코드를 잘못 작성해서 생긴 문제였다.

for i in sample_list:
	if i in sample_list_2:
    	sample_list.remove(i)

for loop를 잘못 이해해서 생긴 문제였다. 인덱스와 range 객체를 사용하지 않았기 때문에 현재 순회중인 리스트에 변화를 줘도 상관 없다고 생각한 것이 오류의 시작이었다.

for i in range(len(sample_list)):
	if sample_list[i] in sample_list_2:
    	sample_list.remove(sample_list[i])

예를 들어 index가 0인 요소를 삭제한다고 하면, index가 1인 요소의 index가 0으로 바뀐다. 따라서 원래 index가 1인 요소는 for loop에서 접근하지 않게 된다.

--- 계속 추가될 예정이다 ---

0개의 댓글