기숙사 생활을 하는 학교에서 어떤 금요일(전원 귀가일)에는 모두 집으로 귀가를 한다.
오랜만에 집에 간 영일이는 아버지와 함께 두던 매우 큰 오목에 대해서 생각해 보다가
"바둑판에 돌을 올린 것을 프로그래밍 할 수 있을까?"하고 생각하였다.
바둑판(19 * 19)에 n개의 흰 돌을 놓는다고 할 때,
n개의 흰 돌이 놓인 위치를 출력하는 프로그램을 작성해보자.
d=[] #대괄호 [ ] 를 이용해 아무것도 없는 빈 리스트 만들기
for i in range(20) :
d.append([]) #리스트 안에 다른 리스트 추가해 넣기
for j in range(20) :
d[i].append(0) #리스트 안에 들어있는 리스트 안에 0 추가해 넣기
n = int(input())
for i in range(n) :
x, y = input().split()
d[int(x)][int(y)] = 1
for i in range(1, 20) :
for j in range(1, 20) :
print(d[i][j], end=' ')#공백을 두고 한 줄로 출력
print() #줄 바꿈
리스트가 들어있는 리스트를 만들면?
가로번호, 세로번호를 사용해 2차원 형태의 데이터처럼 쉽게 기록하고 사용할 수 있다.
리스트이름[번호][번호] 형식으로 저장되어있는 값을 읽고 쓸 수 있고, 더 확장한 n차원의 리스트도 만들 수 있다.
d=[]
for i in range(20) :
d.append([])
for j in range(20) :
d[i].append(0)
위와 같이, 모두 0이 채워진 2차원 리스트를 만드는 코드를 아래와 같은 방법으로 짧게 만들 수도 있다.
... [0 for j in range(20)] #20개의 0이 들어간 [0, 0, 0, ... , 0, 0, 0] 리스트
아래처럼 작성하면 위와 같은 리스트가 20개가 들어간 리스트를 한 번에 만들어 준다.
d = [[0 for j in range(20)] for i in range(20)]
이러한 리스트 생성 방식을 List Comprehensions 라고 한다.
5
1 1
2 2
3 3
4 4
5 5
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d=[]
for i in range(20) :
d.append([])
for j in range(20) :
d[i].append(0)
n = int(input())
for i in range(n) :
x, y = input().split()
d[int(x)][int(y)] = 1
for i in range(1, 20) :
for j in range(1, 20) :
print(d[i][j], end=' ')
print()
column = [[0 for j in range(20)] for i in range(20)]
n = int(input())
for i in range(n):
x, y = input().split()
x, y = int(x), int(y)
for j in range(n):
column[x][y] = 1
for i in range(1, 20):
for j in range(1, 20):
print(column[i][j], end=" ")
print()
이번 문제는 세 가지로 나눌 수 있어요.
1. 중첩 for문으로 0 값이 들어간 19 x 19 크기의 바둑판 만들기.
2. 좌표값 x, y를 입력 받아서 중첩 for문의 x, y 좌표 자리에 1 값 넣기.
3. 리스트 크기별로 출력해서 사각형의 바둑판 모양으로 출력하기.
🔍모델 답안 풀이
1. 바둑판을 만들 변수 d를 만들고 빈 리스트로 초기화를 해준다.
2. for문으로 변수 d 안에 바둑판 크기인 0부터 19까지의 빈 리스트를 추가한다.
d = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
3. 2번에서 만든 for문 안에 중첩 for문을 만들어서 2에서 만든 리스트 안에 0부터 19까지 반복하며 0으로 채운다.
d = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0 . . . . . .d=[] for i in range(20) : d.append([]) for j in range(20) : d[i].append(0)
- 입력 하려고 하는 총 수를 입력 받을 변수 n 선언.
- for문으로 입력 하려고 하는 총 수인 n의 갯수 만큼 반복해서 좌표 값인 x, y에 입력을 받는다.
- 좌표 값을 받았으니 중첩 리스트인 바둑판 d에 좌표 값을 넣어서 그곳에 1을 대입한다.
d[1, 2] = 1을 입력하면
0 0 0 0 0
0 0 0 0 0
0 1 0 0 0
이렇게 된다.
맨 윗줄 부터 0 - 1 두번째
맨 왼쪽 줄부터 0 - 1 - 2 세번째n = int(input()) for i in range(n) : x, y = input().split() d[int(x)][int(y)] = 1
- 중첩 for문을 돌려서 출력한다. 그런데 print(column[i][j], end=" ")이렇게만 쓰면 우리가 원하는 사각형으로 나오지 않는다. end= "" 때문에 이어져서 그렇다.
한 줄을 end로 이었으면 print()로 띄우는 것을 반복해주어야 한다.for i in range(1, 20): for j in range(1, 20): print(column[i][j], end=" ") print()
👻 끝! 👽
input(): 프롬프트를 띄워서 사용자의 입력 받을 수 있게 해준다.
(단, 입력 받은 것은 문자열로 저장된다. print(type()))으로 type() 괄호 안에 변수를 넣고 찍으면 정수인지, 문자열인지, 무슨 타입인지 확일 할 수 있다!)
int(n): 위의 input()에서 말했듯이 input으로 받은 값은 문자열로 저장된다.
산술을 하기 위해, 문자열을 정수로 변환시켜주는 int()를 써서 변환시켜준다.
[ ] list: 변수 안에 여러가지의 값을 넣을 수 있다.
선언 예시)
a = []
b = ["a", "b", "c"]
출력 예시)
print(a[]) -> 빈공간
print(b[0]) -> a
print(b[1]) -> b
print(b) -> ["a", "b", "c"]
for문: 반복을 데이터가 남을 때까지 밑에 내용 계속 반복 실행!
for i in 데이터:
(들여쓰기칸) 실행문
ex)
for i in [1, 2 ,3]:
print(i)
출력: 1
2
3
데이터에는 iterable이 들어갈 수 있다.
range(): 괄호 안에 들어가는 숫자만큼의 수열을 표현해준다.
range(3) -> 0, 1, 2 (0부터 3직전까지 표현)
range(1, 3) -> 1, 2 (1부터 시작해서 3직전까지 표현)
range(1, 3, +2) -> 1 (1부터 시작해서 2씩 늘려가서 3직전까지 표현. (1 + 2는 3이므로 3직전까지 표현))
print(): 괄호 안의 내용을 출력!