반응형
밑의 링크는 CodeUp에서의 문제 링크입니다.
주의해야 할 점
리스트의 실제 인덱스는 0부터 시작합니다.
그런데 문제에서 막대를 놓기 시작하는 좌표는 자연수로 표현합니다. 즉, 1부터 시작합니다.
이것에 주의해서 막대를 놓기 시작하는 좌표를 격자판에서 찾아야 합니다.
생각한 풀이 과정
- 첫 줄에 격자판의 세로 h, 가로 w를 공백을 두고 입력합니다. 각각 정수형으로 변환하고, 변수 h, w에 넣어줍니다.
- 두 번째 줄에 놓을 수 있는 막대의 개수 n을 입력합니다. 정수형으로 변환하고 변수 n에 넣어줍니다.
- 아무 막대도 놓지 않은 처음의 격자판을 0으로 채운 2차원 리스트로 만들어줍니다. 변수 board에 넣어줍니다.
- 막대의 개수 n만큼 반복하는 반복문을 만들어줍니다.
- 막대의 길이 l, 방향 d, 좌표 x, y를 공백을 두고 입력합니다. 각각 정수형으로 변환하고, 변수 l, d, x, y에 넣어줍니다.
- 막대의 방향이 세로 즉, d의 값이 1이라면, 좌표 x, y에서부터 세로 방향으로 막대의 길이 l만큼을 모두 1로 바꿉니다.
- 막대의 방향이 가로 즉, d의 값이 0이라면, 좌표 x, y에서부터 가로 방향으로 막대의 길이 l만큼을 모두 1로 바꿉니다.
- 막대의 개수 n만큼 과정 5 ~ 과정 7을 반복합니다.
- 반복문이 끝나고 나면, 모든 막대를 놓은 격자판의 상태를 출력합니다.
제출한 파이썬 코드
# readline을 사용하기 위해 import합니다.
from sys import stdin
# 첫 줄에 격자판의 세로 h, 가로 w를 공백을 두고 입력합니다.
# 각각 정수형으로 변환합니다.
h, w = map(int, stdin.readline().split())
# 두 번째 줄에 놓을 수 있는 막대의 개수 n을 입력합니다.
# 정수형으로 변환합니다.
n = int(stdin.readline())
# 아무 막대도 놓지 않은 처음의 격자판을 저장하는 2차원 리스트 변수를 만들어줍니다.
# 모두 0으로 초기화합니다.
board = [[0 for y in range(w)] for x in range(h)]
# 놓을 수 있는 막대의 개수 n만큼 반복합니다.
for _ in range(n):
# 막대의 길이 l, 방향 d, 좌표 x, y를 공백을 두고 입력합니다.
# 각각 정수형으로 변환합니다.
l, d, x, y = map(int, stdin.readline().split())
# 막대의 방향이 세로 즉, d의 값이 1이라면
if d:
# 좌표 x, y에서부터 세로 방향으로 막대의 길이 l만큼을 모두 1로 바꿉니다.
for idx in range(x - 1, x - 1 + l):
board[idx][y - 1] = 1
# 막대의 방향이 가로 즉, d의 값이 0이라면
else:
# 좌표 x, y에서부터 가로 방향으로 막대의 길이 l만큼을 모두 1로 바꿉니다.
board[x-1][y-1:y-1+d] = [1] * l
# 모든 막대를 놓은 격자판의 상태를 출력합니다.
for i in range(h):
for j in range(w):
# 격자판에서 한 가로줄의 상황을 공백으로 구분해 출력합니다.
print(board[i][j], end=' ')
# 한 가로줄의 상황이 모두 출력되면 다음 가로줄의 상황을 출력하기 위해 다음 줄로 넘어갑니다.
print()
제출 결과
※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.
※ 더 효율적이고 빠른 정답을 환영합니다.
반응형
댓글