반응형

C언어로 알고리즘 문제를 풀다가 파이썬 알고리즘 문제를 풀 때 마주치는 큰 벽 중 하나가 리스트(list)라고 생각합니다. a=[1,2,3,4] 이런 식으로 사용하면 되고, 슬라이싱 a [1: 3] 배울 때만 해도 나름 간단하다고 생각되지만, 코딩 문제에서 2차원 배열을 만드는 문제를 만나고, 입력이 특이한 알고리즘 문제를 만나면 공부를 쉬고 싶어 지는데요, 그래서 이번 포스팅에서는 파이썬 리스트 입출력, 초기화의 모든 것을 다룹니다. 

 

파이썬 리스트 입출력, 초기화 정리

파이썬
파이썬

우선 이 포스팅에서 다룰 내용은 다음과 같습니다. 

1. 리스트 생성

2. 입출력과 리스트 (1차원, 2차원) 

 

파이썬 리스트 생성 

파이썬에서 리스트를 생성하는 방법으로 2가지 방법이 있습니다. 첫 번째는 대괄호 []로 선언하는 방법이 있고, 두 번째로 list()로 선언하는 방법이 있습니다. 아무 원소도 없는 리스트는 []와 list()로 만들 수 있습니다만, 코딩 문제를 풀 땐 N개의 배열을 초기화한 값이 필요할 때가 있습니다. 그럴 땐 [0]*N으로 0으로 값이 초기화된 1차원 배열을 만들 수 있습니다. 

 

#비어있는 리스트 생성
a=[]
b=list()

#크기가 N인 리스트 생성
N=5
c=[0]*N
print(c)
#결과: [0, 0, 0, 0, 0]

 

파이썬 입출력과 리스트 

공백으로 구분된 수를 입력받아서 리스트에 저장하는 방법은 아래 코드와 같습니다. 

#공백으로 구분된 N개를 입력받기
#입력 예시
#2 4 6 8 10
arr = list(map(int, input().split()))
print(arr)
#출력 
#[2, 4, 6, 8, 10]

엔터로 구분된 수를 입력받는 방법은 다음과 같습니다. 

#엔터로 구분된 1차원 리스트 입력 받기
#입력 예시
#1
#2
#3
#N: 3, 3개의 원소를 받는 경우
N=3
array =[]
for i in range(N):
    array.append(int(input()))
print(array)
#출력
#[1, 2, 3]

공백이 없는 1차원 리스트를 받는 방법은  아래와 같습니다.

#공백 없는 1차원 리스트 입력 받기
#입력 예시
#123
array =list(map(int,input()))
print(array)
#출력
#[1, 2, 3]

 

파이썬 2차원 배열 초기화

알고리즘 문제를 풀다 보면 2차원 맵을 입력받아야 하는 때가 많이 발생하는데요, 다음과 같은 방법으로 2차원 맵을 0으로 초기화하고, 맵 정보를 받을 수 있습니다. 

#N*M 2차원 0 초기화 배열 만들기
#N: 세로, M: 가로
N, M = map(int,input().split())

#2차원 초기화 배열 만들기
visited = [[0]*M for _ in range(N)]
print(visited)
#입력
#2 4
#출력
#[[0, 0, 0, 0], [0, 0, 0, 0]]

#2차원 공백으로 구분된 리스트 정보 받기
array =[]
for i in range(N):
    array.append(list(map(int, input().split())))
print(array)
#입력
#2 4 6 8
#1 3 5 7
#출력
#[[2, 4, 6, 8], [1, 3, 5, 7]]

2차원 문제를 보다 보면 공백으로 구분하지 않고 맵을 줄 때도 있는데요, 이럴 땐 split()를 빼서 input을 받으면 됩니다. 

접근할 수 있는 부분과 접근할 수 없는 부분을 나누는 map을 저장할 때 다음과 같은 방법을 사용합니다. 

#N: 세로, M: 가로
N, M = map(int,input().split())

#입력
#2 4

#2차원 리스트 정보 받기
array =[]
for i in range(N):
    array.append(list(map(int, input())))
print(array)
#입력
#2468
#1357
#출력
#[[2, 4, 6, 8], [1, 3, 5, 7]]

그래프 관련 list는 https://week-book.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A2%8C%ED%91%9C-%EB%AC%B8%EC%A0%9C-%EC%9E%85%EB%A0%A5-%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95 이 포스팅을 참고해주세요. 

 

마무리

리스트 입출력 때문에 알고리즘 풀이가 막히는 분께 도움이 되는 글이었길 바랍니다. 

그리고 제가 수험생일 때 국어 선생님이 해주신 말을 공유하고 포스팅을 마무리하려고 합니다. 

1. 진인사대천명

2. 하기 싫을 때 하는 공부가 보약이다. 

지금은 잘 안 풀리더라도, 노력하면 언젠가는 잘하는 날이 온다고 믿어요! 

반응형