제대로 파이썬 문법을 공부하고 알고리즘을 시도하는 것이 아니라, 나동빈님의 유튜브 강의만 보고 시도해서 그런지 파이썬의 기본 문법을 너무나도 모르고 문제를 풀고 있다.
문제를 풀면서 반복적으로 실수하는 부분을 정리해야 할 필요성을 느꼈다.
파이썬의 input()
자바에서의 스캐너와 버퍼드리더와 비슷하다고 생각하고 문제를 접근했었는데, 아닌 부분이 많았다.
# a1 을 a, 1 로 나누고 싶은 경우
index = input()
x = index[0]
y = index[1]
파이썬은 자바와 다르게 바로 배열로 처리할 수 있다.
int
자바의 경우 타입을 선언하고 문제를 풀다보니, 처음 변수를 선언할 때를 제외하곤 타입에 대한 신경을 많이 안쓴것 같았다.
파이썬의 경우 input을 받고 나중에 int 타입으로 캐스팅(?) 해줘야 하는 부분을 자꾸 까먹고 있다.
index = input()
x = index[0]
y = index[1]
# a1 을 입력받았을 때 y를 int 타입으로 사용하고 싶은 경우
x = index[0]
y = int(index[1])
다음엔 실수하지 않도록 노력해야겠다.
char 의 아스키코드
자바의 경우 char의 아스키코드로 변환은 간단했는데, 파이썬의 경우 어떻게 하는지 몰라서 시간을 소비했다.
index = input()
x = index[0]
y = int(index[1])
# a1 을 입력받아 a 를 아스키코드로 바꾸고 싶은 경우
x = int(ord('a))
ord('char')을 하게 되면 아스키코드로 변환할 수 있다.
이차원 배열 for문
파이썬 for문에서 이차원 배열을 어떻게 사용할지에 어려움을 겪었다.
move = [[-2, -1], [-2, 1], [2, -1], [2, 1], [1, 2], [1, -2], [-1, 2], [-1, -2]]
for i in move:
nextX = indexX + i[0]
nextY = indexY + i[1]
if nextX<= 8 and nextX >= 1 and nextY <=8 and nextY >= 1:
answer += 1
위 코드에서 i 는 move를 전체적으로 돌아가는 것임을 모르고, 자바에서의 i와 같이 1씩 증가된다고만 생각해서 문제풀이에 어려움을 겪었다.
자동으로 move[0] 이 i 로 변환되는듯 하다(..?)
이 부분은 더 찾아보고 정리하도록 하자
for 문
for 문의 증가 범위를 정하고, 1이 아닌 다른 숫자만큼 증가하고 싶다면
for i in range(0, 10, 3)
0 부터 10까지 3씩 증가
0, 3, 6, 9 가 나오게 된다.
(start, end, step)
step 에는 음수가 올 수도 있다.
print(*)
단순 print(list) 만 할 경우 리스트는 [1, 2, 3, 4] 이런 형식으로 출력되지만,
print(*list) 는 1 2 3 4 이렇게 []와 , 를 제거하고 출력해준다.
slicing
list가 있을 때 ex list = [1, 2, 3, 4]
n 번째부터 m 번째까지의 list를 가져올 수 있다.
list[:3] 을 하게 되면
list[1, 2, 3]을 반환하고
list[2:] 을 하게 되면
list[2, 3, 4] 를 반환한다.
list[1:3] 은
list[1, 2, 3]이 반환된다.
capitalize
문자열의 첫 번째 문자를 대분자로 반환
s = hello, world
capitalized = s.capitalize()
capitalized = Hello, world
여기서 첫 글자가 알파벳이 아닌 경우, 아무일도 일어나지 않는다.