https://www.acmicpc.net/problem/2628
2628번: 종이자르기
아래 <그림 1>과 같이 직사각형 모양의 종이가 있다. 이 종이는 가로방향과 세로 방향으로 1㎝마다 점선이 그어져 있다. 가로 점선은 위에서 아래로 1번부터 차례로 번호가 붙어 있고, 세로 점선
www.acmicpc.net
나의 코드
width, length = map(int, input().split()) # 혹시 종이자르는 범위가 벗어나지는 않겠지?
N = int(input())
cut_list = [[0],[0]] # 가로, 세로의 초기값이 있는 리스트 생성
for n in range(N):
func, data = map(int, input().split())
if func == 0: # 가로로 잘라야 할 인덱스 추가하기(세로길이구하기)
cut_list[0].append(data)
if func == 1: # 세로로 잘라야 할 인덱스 추가하기(가로길이구하기)
cut_list[1].append(data)
cut_list[0].append(length) # 가로, 세로의 끝값 추가
cut_list[1].append(width)
for i in cut_list: # 2차원 배열 정렬하기
i.sort()
# print(cut_list)
length_list = []
for i in range(len(cut_list[0])-1): # 세로 리스트 탐색하면서 세로 길이 구하기
length_list.append(cut_list[0][i+1] - cut_list[0][i])
# print(length_list)
width_list = []
for j in range(len(cut_list[1])-1): # 가로 리스트 탐색하면서 가로 길이 구하기
width_list.append(cut_list[1][j+1] - cut_list[1][j])
# print(width_list)
area = max(width_list) * max(length_list) #길이 리스트에서 큰 값만을 추출해서 곱해 제일 큰 영역 구하기
print(area)
결과

데이터를 어떤 방식으로 받아야 할지 고민이 되었던 문제이다. 리스트로 받다가 0과 1로 나누는 거라면 딕셔너리로 받으면 더 쉽게 데이터를 처리할 수 있을텐데?라는 생각이 들어서 딕셔너리로 받으려고 했다. 그런데 정렬을 못하는 상황이라 다시 리스트로 받아서 2차원 배열로 데이터를 처리하며 문제를 풀었다. 오랜만에 바로 맞아서 자신감 상승했따!!!
'스터디 1일 1커밋' 카테고리의 다른 글
| 240303 [SWEA] 1974. 스도쿠 검증 (0) | 2024.03.03 |
|---|---|
| 240303 [BOJ/백준] 2578. 빙고 (0) | 2024.03.03 |
| 240302 [BOJ/백준] 2846. 오르막길 (0) | 2024.03.02 |
| 240301 [BOJ/백준] 2468. 안전 영역 (+수정) (0) | 2024.03.01 |
| 240229 [SWEA] 배열_3분할 (0) | 2024.03.01 |