[CodeUp 기초 100제] 6095번 풀이 with 파이썬(python)

Jeony·2021년 9월 17일
1

codeup 기초 100제

목록 보기
95/98
post-thumbnail

문제

리스트

기숙사 생활을 하는 학교에서 어떤 금요일(전원 귀가일)에는 모두 집으로 귀가를 한다.

오랜만에 집에 간 영일이는 아버지와 함께 두던 매우 큰 오목에 대해서 생각해 보다가
"바둑판에 돌을 올린 것을 프로그래밍 할 수 있을까?"하고 생각하였다.

바둑판(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)
  1. 입력 하려고 하는 총 수를 입력 받을 변수 n 선언.
  2. for문으로 입력 하려고 하는 총 수인 n의 갯수 만큼 반복해서 좌표 값인 x, y에 입력을 받는다.
  3. 좌표 값을 받았으니 중첩 리스트인 바둑판 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
  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(): 괄호 안의 내용을 출력!

profile
알고리즘으로 문제를 해결하자 (ʘ言ʘ╬)

0개의 댓글