본문 바로가기
Programming/Python

코드업 6097 설탕막대기 두기 - 파이썬 (Python)

by 심코딩 2022. 5. 3.

오늘은 저번 포스팅에 이어 코드업 문제 한개 더 포스팅 하려고 한다.

 

문제는 아래와 같다.

 

입 출력 예시는 아래와 같다.

일단 문제를 보면 알겠지만, 세번째 줄 까지는 input을 이용하여야 한다.

 

첫 input은 격자판의 크기 (h*2)가 될 것이고,

두번째는 둘 막대기의 갯수 (n) 이 될 것이고,

세번째는 막대의길 (l), 방향 (d), 좌표 (x,y)가 될 것이다.

 

여기서 세번째 input의 방향에서 0은 가로, 1은 세로가 된다.

 

출력값은 격자판에서 막대기가 놓여진 곳은 숫자 1로 표현이 되고, 나머지는 0으로 표현이 되면 되는것이다.

 


정답코드 먼저 보자.

 

h, w = map(int, input().split()) 

shape = [[0] * w for _ in range(h)]

n = int(input())

for i in range(n):
    l,d,x,y = map(int, input().split()) 
    if d == 0:
      for j in range(l):
        shape[x-1][y-1+j] = 1
    else:
      for j in range(l):
        shape[x-1+j][y-1] = 1
  
for i in range(h):
  for j in range(w):
    print(shape[i][j], end =' ')
  print()

 

다시 한번 말하지만 코드를 내 스타일대로 내가 스스로 만드는 것도 중요하다.

하지만 많은 코드들을 보면서 이런식으로 구상을 해야하는구나 라는걸 느끼는게 더 중요하다고 생각한다.

 

첫 줄과 셋째줄의 input은 설명이 필요 없을걸로 생각된다.

 

shape = [[0] * w for _ in range(h)]

이 부분은 격자판을 만드는 코드이다. 격자판을 0으로 가득 채우는 코드이다. 예전 포스팅을 보신 분이라면 그때 당시에는 리스트안에 리스트를 만들어 넣었었지만 이번엔 그 코드를 한 문장에 표현을 하였다.

 

for i in range(n):
    l,d,x,y = map(int, input().split()) 
    if d == 0:
      for j in range(l):
        shape[x-1][y-1+j] = 1
    else:
      for j in range(l):
        shape[x-1+j][y-1] = 1

제일 중요한 부분이다. 막대기를 두는 코드를 만드는건데.

만약 d == 0: , 즉 막대기가 가로라면 막대기의 길이 (l) 만큼 반복이 된다는 코드이다.

 

여기서 주의 할 점은 x가 세로길이, y가 가로길이 라는 것이다.

else 하단 부분은 막대기가 세로일때, 위의 반대이다.

댓글