반응형
https://www.acmicpc.net/problem/19568
직사각형 문제(python)
30 × 30 칸에 0 ~ 100000까지 숫자를 넣어서, 직사각형으로 잘랏을 때 1~50000까지 숫자를 만드는 문제
다른 분이 보여준 저격수..(?) 스코프 힌트를 보고 해결할 수 있었다
⚙️내가 푼 정답코드
table = [[0]*30 for _ in range(30)]
for i in range(15):
table[15][14-i] = 1
table[14-i][15] = 1*16
table[15][15+i] = 1*16*16
table[15+i][15] = 1*16*16*15
table[15][15] = 0
for result in table:
print(*result)
그림으로 보는 정답
📌문제 접근 포인트
1. 일단 입력을 받지 않는다. 답만 출력할 수 있도록 만들어주면 된다.
2. 내부에서 직사각형으로 잘랐을 때, 숫자가 1~50000까지 만들어 질 수 있게 구성해야한다.
3. 1씩 늘려나갈 수 있게 구성하려면 어떤 식으로 구성하면 좋을까? → n의 진수를 생각해보면 가령 12진수 쯤이라치면 12가 되는순간 10, 24가되는순간 20 이런식으로 표현될 수 있다. 이런 점에서 착안해서 문제를 해결해보자
4. 가운데를 기준으로, 왼쪽으로 직사각형 크기를 한칸씩 늘려가면 +1씩 늘어나고, 3번의 형태처럼 15까지 왼쪽끝에 도달하면 가운데로 돌아와서 위로 한칸늘리고, 다시 왼쪽으로 늘려가는 형태로 모양을 구상하면 5만까지 커버칠 수 있는 형태의 30 × 30의 리스트를 만들 수 있다.
반응형
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 11442] 홀수번째 피보나치 수의 합 (python) (0) | 2023.03.27 |
---|---|
[백준 15311] 약 팔기 (python) (0) | 2023.03.25 |
[백준 1339] 단어 수학 (python) (0) | 2023.03.25 |
[백준 16967] 배열 복원하기 (python) (0) | 2023.03.23 |
[백준 16139] 인간-컴퓨터 상호작용 (python) (0) | 2023.03.23 |
댓글