감자튀김 공장🍟

[백준/2477] 참외밭 (with 파이썬) 본문

Algorithm/BOJ

[백준/2477] 참외밭 (with 파이썬)

Potato potage 2022. 12. 10. 21:54
반응형

✔ 문제


풀이

import sys
input = sys.stdin.readline

k = int(input())
length, small = [], []
x, y = [], []

for i in range(6):
    w, l = map(int, input().split())
    length.append([w, l])
    if length[i][0] == 1 or length[i][0] == 2: # 가로
        x.append(length[i][1])
    if length[i][0] == 3 or length[i][0] == 4: #세로
        y.append(length[i][1])

for i in range(6): # 작은 사각형의 변 구하기
    if length[i][0] == length[(i+2)%6][0]:
        small.append(length[(i+1)%6][1])

print(((max(x) * max(y)) - (small[0] * small[1])) * k)

✔ 설명

전체 사각형에서 작은 사각형의 넓이를 빼면 된다.

전체 사각형의 크기는 입력 받은 변의 방향으로 구분할 수 있다. 1,2가 가로 3,4가 세로이므로 변의 방향으로 가로, 세로 배열에 각자 저장한다.

 

B의 변을 구하는 방법은 문제에서 입력받은 방향이 하나의 인덱스를 뛰어 넘고 또 나오면 그 중간의 인덱스가 가리키는 값이 B의 양 변이 된다. 

예시 입력의 방향 값만 보면 (4, 2, 3, 1, 3, 1)이 되는데 (3, 1, 3, 1) 이 부분에서 중간 (1,3)의 값이 B의 양변임을 알 수 있다.

idx =  2의 3이 idx = 4의 3과 같을 경우, idx = 3의 길이를 small에 저장한다. (꺾이는 부분임을 찾고, 그 중간 값을 저장)

idx = 3의 1이 idx = 5의 1과 같을 경우, idx = 4의 길이를 small에 저장한다. (B의 x, y 저장 완료)

(%6을 하는 경우는 idx 값이 초과될 수 있으므로 나눠주는 것이다.)


✔ 후기

B의 길이를 구하는 부분에서 로직을 발견하지 못해서 다른 블로그들을 참고하고 풀어봤다.

과연 오늘 제정신이었다면 코드 참고 없이 로직을 발견할 수 있었을까..?

 

참고 코드

https://whitehairhan.tistory.com/281

 

[백준/구현] 2477: 참외밭 - 파이썬

문제 https://www.acmicpc.net/problem/2477 2477번: 참외밭 첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에

whitehairhan.tistory.com

 

반응형
Comments