본문 바로가기

스터디 1일 1커밋

240302 [BOJ/백준] 2628. 종이자르기

 

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차원 배열로 데이터를 처리하며 문제를 풀었다. 오랜만에 바로 맞아서 자신감 상승했따!!!