반응형
문제
https://www.acmicpc.net/problem/25308
25308번: 방사형 그래프
게임 캐릭터의 능력치를 한 눈에 보기 좋게 나타내는 방법으로 방사형 그래프가 있다. 캐릭터는 8개의 능력치를 갖고 있고 각 능력치를 a1,a2,⋯,a8이라고 하면, 그래프는 팔각형 형태이고
www.acmicpc.net
풀이
먼저, 순열을 통해 능력치를 나열할 수 있는 모든 경우를 구해줍시다.
이제 이 능력치에 대해서 a1, a2, a3가 볼록인지, a2, a3, a4가 볼록인지 ... a8, a1, a2가 모두 볼록인지 확인해주고
모두 볼록이라면 볼록 다각형이 만들어지는 경우일 것입니다.
다음과 같은 공식을 통해 볼록인지 확인할 수 있습니다.
(a1×a3)×√2≥a2×(a1+a3)
1부터 8까지 모두 만족한다면 볼록 다각형이 만들어 지는 경우입니다.
소스코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
let array = readLine()!.split(separator: " ").map { Double($0)! } | |
var permutationArrays: [[Double]] = [] | |
var visited = [Bool](repeating: false, count: 8) | |
func dfs(n: Int, nums: [Double]) { | |
if n == 8 { | |
permutationArrays.append(nums) | |
return | |
} | |
for i in 0..<8 { | |
if !visited[i] { | |
visited[i] = true | |
dfs(n: n + 1, nums: nums + [array[i]]) | |
visited[i] = false | |
} | |
} | |
} | |
dfs(n: 0, nums: []) | |
var answer = 0 | |
for arr in permutationArrays { | |
var isSuccess = true | |
for i in 0..<8 { | |
if !(arr[i] * arr[(i + 2) % 8] * sqrt(2) <= arr[(i + 1) % 8] * (arr[i] + arr[(i + 2) % 8])) { | |
isSuccess = false | |
break | |
} | |
} | |
answer += isSuccess ? 1 : 0 | |
} | |
print(answer) |
후기
이 블로그를 참고해서 풀었습니다.
반응형
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 17387 선분 교차 2 (Swift) (0) | 2023.05.24 |
---|---|
[BOJ] 백준 17386 선분 교차 1 (Swift) (0) | 2023.05.24 |
[BOJ] 백준 11758 CCW (Swift) (0) | 2023.05.24 |
[BOJ] 백준 2166 다각형의 면적 (Swift) (0) | 2023.05.24 |
[BOJ] 백준 2213 트리의 독립집합 (Swift) (0) | 2023.05.24 |