알고리즘

코드업 기초 100제 파이썬 [6097]

mimi04 2023. 11. 29. 12:40

코테 준비를 위해 알고리즘 기초를 다시 탄탄히 다지며 복습할 겸 코드업 기초 100제 파이썬 문제를 쭉 풀었다.

앞 부분은 확실히 예전에 비해 쉽게 풀렸으나, 뒷부분으로 갈수록 20분 정도 푸는데 시간이 걸렸고, 실패도 몇 번했으나, 결국 통과되었다.ㅎㅎ

이 문제는 파이썬의 기본인 출력함수 그리고 좌표문제에 유용하게 쓰일 수 있는 내용이라 담아보았다.


[6097] 설탕과자 뽑기

부모님과 함께 놀러간 영일이는
설탕과자(설탕을 녹여 물고기 등의 모양을 만든 것) 뽑기를 보게 되었다.
길이가 다른 몇 개의 막대를 바둑판과 같은 격자판에 놓는데,
막대에 있는 설탕과자 이름 아래에 있는 번호를 뽑으면 설탕과자를 가져가는 게임이었다.


(잉어, 붕어, 용 등 여러 가지가 적혀있다.)

격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l),
막대를 놓는 방향(d:가로는 0, 세로는 1)
막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때,
격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.

입력:

첫 줄에 격자판의 세로(h), 가로(w) 가 공백을 두고 입력되고,
두 번째 줄에 놓을 수 있는 막대의 개수(n)
세 번째 줄부터 각 막대의 길이(l), 방향(d), 좌표(x, y)가 입력된다.
1 <= w, h <= 100
1 <= n <= 10
d = 0 or 1
1 <= x <= 100-h
1 <= y <= 100-w

출력:

모든 막대를 놓은 격자판의 상태를 출력한다.
막대에 의해 가려진 경우 1, 아닌 경우 0으로 출력한다.
단, 각 숫자는 공백으로 구분하여 출력한다.

입력 예시:

5 5

3

2 0 1 1

3 1 2 3

4 1 2 5

출력 예시:

1 1 0 0 0

0 0 1 0 1

0 0 1 0 1

0 0 1 0 1

0 0 0 0 1

 


<나의 코드>

h, w = map(int, input().split())
A = [[0] * w for _ in range(h)]

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

for i in range(h):
    for j in range(w):
        print(A[i][j], end=' ')
    print()

 

<코드 설명>

1) 먼저, h, w로 격자판의 세로(h), 가로(w)길이를 공백으로 입력받는다. map함수를 사용해서 바로 입력받은 데이터를 정수형으로 변환시켜 주었다.

2) 세로, 가로 길이가 h, w인 0으로 채워진 격자판 배열 A를 선언한다. 이중 배열 형식으로 선언했다.

3) 막대 개수 정수형 n개를 입력받는다.

4) 막대 개수 n개 만큼 반복하면서 l, d, x, y를 입력받는다.

5) 입력받을 때마다 i를 막대 길이 l만큼 반복하면서 d가 0이면(가로), 

    y에 i를 더하여 오른쪽 옆으로 l길이만큼 1을 대입한다. 

6) 이 때 각 x, y 자리에 1씩 빼는 이유는 격자 길이는 0이없고 1부터 시작하지만, 배열의 인덱스는 0부터 시작하므로 -1씩 각각 빼주는 것이다. 

이 과정을 빼먹으면 list out of range 에러가 발생한다. (이것때문에 몇 분 날렸음 ㅎㅎ)

7) 그리고 마지막에 h(세로) 범위의 w(가로) 범위만큼 돌면서 A[i][j]를 출력하고, end=' '는 파이썬 자동 줄바꿈 기능을 방지하고 공백으로 이어준다. 그리고 밑에 print()를 하여 띄어쓰기를 해주어 격자처럼 다음줄에 두번째 h범위의 값들이 출력되게 해준다. 

sep=' ' vs end=' '

end=' ' 대신에 sep=' ' 을 입력하면 출력결과가 가로로 나오는 것이 아닌 세로로 출력된다. 즉 줄바꿈이 된다는 것이다.

따라서 줄바꿈을 하지 않고 가로로 입력하고 싶을 땐 end=' ' 를 사용하쟈! 

반응형