https://www.acmicpc.net/problem/2477
- 첫 시도(틀림)
# 백준 2477 참외밭
cham_per_1 = int(input())
n_s = []
e_w = []
for _ in range(6):
a = list(map(int, input().split()))
if a[0] == 3 or a[0] == 4:
n_s.append(a)
else:
e_w.append(a)
h = max(n_s, key = lambda x : x[1])
w = max(e_w, key = lambda x : x[1])
n_s.remove(h)
e_w.remove(w)
mini_h = n_s[1][1]
mini_w = e_w[0][1]
# 넓이
width = h[1] * w[1] - mini_h * mini_w
# 참외 개수
cham_num = width * cham_per_1
print(cham_num)
처음에 푼 풀이는 첫 시작으로 북쪽으로 가거나 서쪽으로 가는 방향의 길이가 제일 큰 가로변일 때만 성립하는 풀이였습니다...ㅎㅎ
그래서 결국 다른 분의 풀이를 참고했습니다.. ㅜ.ㅜ
https://my-coding-notes.tistory.com/555
- 다른 분 풀이
import sys
input = sys.stdin.readline
n = int(input())
arr = []
maxx = [(0,0),(0,0)]
# 큰 사각형의 변을 구한다
for i in range(6):
d,w = map(int,input().split())
d = 0 if d<=2 else 1
if w > maxx[d][1]:
maxx[d] = (i,w)
arr.append((d,w))
# 인접한 변들을 체크해준다.
ans = maxx[0][1]*maxx[1][1]
check = [False]*6
for idx,_ in maxx:
for i in idx,(idx+1)%6,idx-1:
check[i] = True
# 체크되지 않은 남은 변을 찾아 넓이를 빼 준다.
min_square = 1
for i in range(6):
if not check[i]:
min_square *= arr[i][1]
print((ans-min_square)*n)
다른 것도 좋았지만
인접하지 않은 변을 찾을 때 마스킹을 해서 찾는 방법이 인상적이었습니다.
문제를 풀면 풀수록 쉽지가 않네요...
'알고리즘 > 백준' 카테고리의 다른 글
[Python] 백준 파이썬 1002 터렛 (0) | 2022.10.06 |
---|---|
[Python] 백준 파이썬 3053 택시 기하학 (0) | 2022.10.05 |
[Python] 백준 파이썬 4153 직각 삼각형 (0) | 2022.10.03 |
[Python] 백준 파이썬 11478 서로 다른 부분 문자열의 개수 (0) | 2022.10.02 |
[Python] 백준 파이썬 1269 대칭 차집합 (0) | 2022.10.01 |