[Swift 코테] 백준 2477 참외밭

2022. 7. 17. 18:19Swift 코딩테스트/Swift 백준 문제 풀이

728x90

 


큰 사각형 - 작은 사각형의 문제다.

문제점은 작은 사각형을 어떻게 구하는지

    - 작은 사각형의 변은 큰 사각형의 변과 인접하지 않는다.

    - 큰 사각형의 가로 변(160)에 인접한 변은 세로변들(30, 50)

                         세로 변(50)에 인접한 변은 가로변들(160, 100)

    - 세로변들 차의 절대값(30 - 50)은 작은 사각형의 세로 변 길이(20)

    - 가로변들 차의 절대값(160, 100)은 작은 사각형의 가로 변 길이(60)

    - 작은 사각형변 길이(20) X 세로 사각형 변 길이(60) = 작은 사각형 넓이(1200)

 

 

 

//코드

import Foundation

let num = Int(readLine()!)!
var LV = 0; var LH = 0
var VIdx = 0; var HIdx = 0

var input = [[Int]]()
for i in 0...5{
    var tmp = readLine()!.split(separator: " ").map{Int($0)!}
    //큰 사각형 변 길이 찾기
    switch tmp[0]{
    case 1, 2:    //가로
        if tmp[1] > LH{
            LH = tmp[1]
            HIdx = i
        }
    case 3, 4:    //세로
        if tmp[1] > LV{
            LV = tmp[1]
            VIdx = i
        }
    default:
        break
    }
    input.append(tmp)
}

//큰 사각형 넓이 L
let L = LV * LH

//큰 사각형 변의 인덱스가 0일때 -1을 하면 에러가 생기기 때문에 6(=0)으로 변경한 후 계산
if VIdx == 0{ VIdx = 6 }
if HIdx == 0 { HIdx = 6}

//+-1을 하는 이유는 인접한 변들로 계산을 하기 위해
var S1 = abs(input[(VIdx - 1) % 6][1] - input[(VIdx + 1) % 6][1])
var S2 = abs(input[(HIdx - 1) % 6][1] - input[(HIdx + 1) % 6][1])
let S = S1 * S2

print((L - S) * num)

 

 

 

 

728x90