Algorithm/Simulation

[Python] 백준 2477번 참외밭

코딩쪼앙 2023. 5. 3. 20:53

문제

 

2477번: 참외밭

첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지

www.acmicpc.net

입력

  • 첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나는 변의 방향과 길이 (1 이상 500 이하의 정수) 가 둘째 줄부터 일곱 번째 줄까지 한 줄에 하나씩 순서대로 주어진다. 변의 방향에서 동쪽은 1, 서쪽은 2, 남쪽은 3, 북쪽은 4로 나타낸다.

출력

  • 첫째 줄에 입력으로 주어진 밭에서 자라는 참외의 수를 출력한다.

입력 예제

7
4 50
2 160
3 30
1 60
3 20
1 100

출력 예제

47600

문제 풀이

  • (큰 사각형의 넓이 - 작은 사각형의 넓이) * 면적 당 열리는 참외의 수를 구해야 한다.
  • 큰 사각형의 넓이 구하기
    • 방향 값이 1과 2일 때(동쪽, 서쪽 방향) 가로 길이이므로 가로길이 중 가장 긴 길이가 큰 사각형의 가로 길이이다.
    • 위와 같이 방향 값이 3과 4일 때의 값 중 가장 긴 길이가 큰 사각형의 세로 길이이다.
    • 위에서 구한 긴 가로 길이 * 긴 세로 길이의 값이 큰 사각형의 넓이이다.
  • 작은 사각형의 넓이 구하기
    • 큰 사각형의 가로 양 옆에 세로 변이 붙어있는데 이 두 길이 차가 작은 사각형의 세로 길이이다.
      • a옆 노란색 세로 줄
    • 마찬가지로 큰 사각형의 세로 양 옆에 붙어있는 가로 변들의 길이 차가 작은 사각형의 가로 길이이다.
      • b옆 초록색 가로 줄 
    • 큰 사각형의 가로 인덱스와 세로 인덱스를 저장해놨으므로 각 변들의 정보가 저장된 배열에서 인접한 두 가로 길이의 값과 세로 길이의 값을 구할 수 있다.
      • 큰 사각형의 가로나 세로 값의 인덱스가 0인 경우 인접한 변의 정보는 -1번 인덱스와, 1번 인덱스가 아닌 마지막 인덱스와 첫 번째 인덱스에 저장되어있고, 5인경우도 마찬가지로 0번 인덱스와 4번 인덱스에 저장되어있으므로 %6을 하여 순환시켜 줘야함 인덱스 에러에 주의
    • 큰 사각형의 넓이와 작은 사각형의 넓이를 모두 구했다면, 큰 사각형의 넓이에서 작은 사각형의 넓이를 뺀 후 1㎡당 열리는 참외의 값을 곱하여 출력한다.

코드

# 동서남북(1,2,3,4)
k = int(input())
graph = []
for _ in range(6):
    d,l = map(int,input().split())
    graph.append((d,l))

# 가장 긴 가로와 세로 길이 구하기
w,w_idx = 0,0
h,h_idx = 0,0
for i in range(len(graph)):
    # 동,서쪽 방향인 경우 가로 길이
    if graph[i][0] == 1 or graph[i][0] == 2:
        if graph[i][1] > w:
            w = graph[i][1]
            w_idx = i

    # 남, 북쪽 방향인 경우 세로 길이
    if graph[i][0] == 3 or graph[i][0] == 4:
        if graph[i][1] > h:
            h = graph[i][1]
            h_idx = i

# 작은 사각형의 가로, 세로 길이 구하기
small_w = abs(graph[(w_idx - 1) % 6][1] - graph[(w_idx + 1) % 6][1])
small_h = abs(graph[(h_idx - 1) % 6][1] - graph[(h_idx + 1) % 6] [1])

size = ((w * h) - (small_w * small_h)) * k
print(size)