알고리즘 공부/파이썬(Python)

백준 2477번 참외밭 파이썬

마달랭 2024. 6. 27. 00:13
반응형

리뷰

딕셔너리를 활용해 풀고자 했는데 참외밭의 모양마다 작은 면적의 인덱스가 달라 어려움을 겪었다. 리스트 인덱스를 통한 풀이 방법으로 통과

문제 풀이

  1. 방향과 길이를 리스트를 초기화 후 각각의 리스트에 값을 전달해 준다.
  2. 먼저 큰 사각형의 가로 세로 길이부터 구해준다.
  3. 작은 사각형의 가로의 길이는 큰 사각형과 인접해 있는 가로 길이의 차이다. 절댓값을 활용해 줬다.
  4. 작은 사각형의 세로길이도 마찬가지로 큰 사각형과 인접해 있는 세로 길이의 차이다.
  5. 큰 사각형에서 작은 사각형을 빼준 후 1m^2당 참외 갯수를 더해주면 된다.

참고 사항

인접한 인덱스를 구할 때 i - 1, i + 1로 해줄 경우 인덱스 에러가 날 가능성이 있으므로 % 6을 통해 인덱스를 범위 내에서 잘 지정해 주자

정답 코드

def q2477():
    # 백준 2477번 참외밭 파이썬
    k = int(input())
    dist = []
    length = []
    for _ in range(6):
        d, l = map(int, input().split())
        dist.append(d)
        length.append(l)

    big_w, big_h = 0, 0
    for i in range(6):
        if dist[i] == 1 or dist[i] == 2:
            big_w = max(big_w, length[i])
        if dist[i] == 3 or dist[i] == 4:
            big_h = max(big_h, length[i])

    small_w, small_h = 0, 0
    for i in range(6):
        if dist[i] == 1 or dist[i] == 2:
            if length[i] == big_w:
                small_h = abs(length[(i + 1) % 6] - length[(i + 5) % 6])
        if dist[i] == 3 or dist[i] == 4:
            if length[i] == big_h:
                small_w = abs(length[(i + 1) % 6] - length[(i + 5) % 6])
    print(k * ((big_w * big_h) - (small_w * small_h)))
q2477()

 

728x90
반응형