코드업 파이썬 6097번 풀이입니다.
https://codeup.kr/problem.php?id=6097
문제
부모님과 함께 놀러간 영일이는
설탕과자(설탕을 녹여 물고기 등의 모양을 만든 것) 뽑기를 보게 되었다.
길이가 다른 몇 개의 막대를 바둑판과 같은 격자판에 놓는데,
막대에 있는 설탕과자 이름 아래에 있는 번호를 뽑으면 설탕과자를 가져가는 게임이었다.
(잉어, 붕어, 용 등 여러 가지가 적혀있다.)
격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l),
막대를 놓는 방향(d:가로는 0, 세로는 1)과
막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때,
격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.
코드
h, w = input().split()
h = int(h)
w = int(w)
p = []
for i in range(h+1):
p.append([])
for j in range(w+1):
p[i].append(0)
n = int(input())
for i in range(n):
l, d, x, y = input().split()
l = int(l)
d = int(d)
x = int(x)
y = int(y)
if d == 0:
for j in range(l):
p[x][y+j] = 1
else:
for j in range(l):
p[x+j][y] = 1
for i in range(1, h+1):
for j in range(1, w+1):
print(p[i][j], end=' ')
print()
코드 풀이
1) 격자판 생성하기
가로, 세로 길이 값을 받는다.
h, w = input().split()
h = int(h)
w = int(w)
p = []
for i in range(h+1):
p.append([])
for j in range(w+1):
p[i].append(0)
변수 p로 격자판 리스트를 생성한다.
격자판에서 (0, 0) 좌표도 포함이기 때문에 for문 범위 값에는 +1을 해줘야 한다!
2) 막대 모양 값 생성하기
막대를 놓을 개수인 n을 입력받는다.
n의 횟수에 따라 for문을 돌린다.
n = int(input())
for i in range(n):
l, d, x, y = input().split()
l = int(l)
d = int(d)
x = int(x)
y = int(y)
if d == 0:
for j in range(l):
p[x][y+j] = 1
else:
for j in range(l):
p[x+j][y] = 1
막대의 길이에 따라 가려지는 좌표의 값을 1로 변경해야 한다. 따라서 l을 for문의 범위로 둔다.
d == 0은 가로로 막대를 놓아야 하는 경우이다.
주의할 점은 가로로 증가라는 것은 column이 증가한다는 뜻이므로 y의 인덱스에 변수 j를 넣는다.
else는 세로로 놓을 경우이므로, 반대로 입력해주면 된다.
3) 결과 출력하기
for i in range(1, h+1):
for j in range(1, w+1):
print(p[i][j], end=' ')
print()
지난 코드업 6096번과 마찬가지로 중첩 for문을 통해 출력한다.
(0, 0) 좌표는 제외해야 하므로 1부터 h 또는 w에 +1 한 값을 범위로 잡는다.
'Python' 카테고리의 다른 글
[Python] 문자열 포맷 방법 - %, format, f-string (0) | 2022.06.30 |
---|---|
[Python] print 함수의 문자열 출력 방법 (0) | 2022.06.29 |
[CodeUp] Python 기초 100제 | 6098번 풀이 (0) | 2022.06.24 |
[CodeUp] Python 기초 100제 | 6096번 풀이 (0) | 2022.06.23 |
[Python] ord(), chr() 함수 (0) | 2022.06.17 |