본문 바로가기
알고리즘/CodeUp PS

[CodeUp][Python 기초 100제] 6097번 : [기초-리스트] 설탕과자 뽑기

by 빛밤하늘 2021. 8. 8.
반응형

밑의 링크는 CodeUp에서의 문제 링크입니다.

 

[기초-리스트] 설탕과자 뽑기(py)

python언어기초100제v1.0 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용

codeup.kr

 

 

 

 

 

 

 

 

주의해야 할 점

리스트의 실제 인덱스는 0부터 시작합니다.

그런데 문제에서 막대를 놓기 시작하는 좌표는 자연수로 표현합니다. 즉, 1부터 시작합니다.

이것에 주의해서 막대를 놓기 시작하는 좌표를 격자판에서 찾아야 합니다.

 

 

 

생각한 풀이 과정

  1. 첫 줄에 격자판의 세로 h, 가로 w를 공백을 두고 입력합니다. 각각 정수형으로 변환하고, 변수 h, w에 넣어줍니다.
  2. 두 번째 줄에 놓을 수 있는 막대의 개수 n을 입력합니다. 정수형으로 변환하고 변수 n에 넣어줍니다.
  3. 아무 막대도 놓지 않은 처음의 격자판을 0으로 채운 2차원 리스트로 만들어줍니다. 변수 board에 넣어줍니다.
  4. 막대의 개수 n만큼 반복하는 반복문을 만들어줍니다.
  5. 막대의 길이 l, 방향 d, 좌표 x, y를 공백을 두고 입력합니다. 각각 정수형으로 변환하고, 변수 l, d, x, y에 넣어줍니다.
  6. 막대의 방향이 세로 즉, d의 값이 1이라면, 좌표 x, y에서부터 세로 방향으로 막대의 길이 l만큼을 모두 1로 바꿉니다.
  7. 막대의 방향이 가로 즉, d의 값이 0이라면, 좌표 x, y에서부터 가로 방향으로 막대의 길이 l만큼을 모두 1로 바꿉니다.
  8. 막대의 개수 n만큼 과정 5 ~ 과정 7을 반복합니다.
  9. 반복문이 끝나고 나면, 모든 막대를 놓은 격자판의 상태를 출력합니다.




 

 

 

 

 

제출한 파이썬 코드

# 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()

 

 

 

제출 결과

결과

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글