일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- War Game
- windosw 문자열
- Java
- OSI
- 파이썬
- 재귀
- SWiFT
- Stack
- level13
- ftz
- pwnable.kr
- 두근두근 자료구조
- PHP
- web
- 암호수학
- windosws wbcs
- 큐
- ftz level13
- 자료구조
- 시간복잡도
- 파일 시스템
- 정렬 알고리즘
- c언어
- 스택
- System
- C
- 백준
- LoB
- 미로 탐색 알고리즘
- HTML
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 백준골드4) 키 순서 본문
반응형
https://www.acmicpc.net/problem/2458
1. 문제이해
- 키가 모두 다른 N명의 학생 중 자신의 키가 몇 번째인지 알 수 있는 학생의 수 구하기
2. 접근방법
X 노드에서 출발하거나, 다른 노드에서 X 노드에 도착하는 것이 모든 노드에 대해 가능할 때 자신의 키가 몇 번째인지 알 수 있는 학생이다.
플로이드 워셜
- 모든 지점에서 다른 모든 지점까지 최단 경로 구할 수 있음
- 이 문제는 거리를 구하는 것이 아닌 도달이 가능한지만 구하면 됨
자신의 키가 몇 번째인지 알 수 있는 학생 == 모든 노드에 접근 가능한 노드
3. 코드
func solution(){
var input = readLine()!.split(separator: " ").map{Int(String($0))!}
let N = input[0]
let M = input[1]
var map = Array(repeating: Array(repeating: false, count: N), count: N)
for _ in 0..<M{
input = readLine()!.split(separator: " ").map{Int(String($0))!}
map[input[0]-1][input[1]-1] = true
}
var result = N
// 플로이드 워셜
for z in 0..<N{
for x in 0..<N{
for y in 0..<N{
if map[x][z] != false, map[z][y] != false{
map[x][y] = true
}
}
}
}
// 자신의 키가 몇 번째인지 알 수 있는 학생
func isComparable(cur: Int) -> Bool{
var inputIndex = [Int]()
for i in 0..<N{
if cur != i, map[cur][i] == false{
inputIndex.append(i)
}
}
for i in inputIndex{
if cur != i, map[i][cur] == false{
return false
}
}
return true
}
for i in 0..<N{
if !isComparable(cur: i){
result -= 1
}
}
print(result)
}
solution()
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] 프로그래머스 레벨 3 다단계 칫솔 판매 (0) | 2025.01.07 |
---|---|
[Swift] 백준 골드4) 녹색 옷 입은 애가 젤다지? (0) | 2024.12.31 |
[Swift] 백준 타임머신 11657 (0) | 2024.12.18 |
[Swift] 백준 주사위 윷놀이 17825 (0) | 2024.12.10 |
[Swift] 백준 2116 주사위 쌓기 (0) | 2024.12.03 |