[백준] 10451번: 순열 사이클 - Kotlin[코틀린]

2023. 12. 19. 23:35·알고리즘/Baekjoon

문제

 

 

10451번: 순열 사이클

1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\  3

www.acmicpc.net

 


풀이

 

 DFS를 활용해 순열 사이클을 구할 수 있다.

 

 입력받은 배열에는 다음으로 이동할 위치를 가르키고 있기 때문에 현재 위치는 방문 표시를 해주고 가르키는 위치로 DFS 탐색을 해주면 된다. 만약 현재 위치에서 가르키는 위치가 이미 방문했던 위치인 경우, 순열 사이클이 만들어진 것이다. 

 

 반복문을 통해 각 위치에서 시작하는 사이클을 구하면 되는데, 이미 방문했던 위치는 사이클에 포함되어 있는 것이므로 DFS를 실행하지 않는다.

 


코드

 

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    val sb = StringBuilder()

    repeat(br.readLine().toInt()) {
        val num = br.readLine().toInt()
        val arr = br.readLine().split(' ').map { it.toInt() - 1 }
        val visited = BooleanArray(num)

        fun dfs(depth: Int) {
            visited[depth] = true
            val next = arr[depth]
            if(!visited[next]) {
                dfs(next)
            }
        }
        var cnt = 0
        for(i in 0 until num) {
            if(!visited[i]) {
                dfs(i)
                cnt++
            }
        }
        sb.append("$cnt\n")
    }

    bw.write(sb.toString())
    bw.flush()
    bw.close()
    br.close()
}

 

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

[백준] 1743번: 음식물 피하기 - Kotlin[코틀린]  (0) 2023.12.21
[백준] 1965번: 상자넣기 - Kotlin[코틀린]  (0) 2023.12.20
[백준] 1072번: 게임 - Kotlin[코틀린]  (0) 2023.12.19
[백준] 1213번: 팰린드롬 만들기 - Kotlin[코틀린]  (0) 2023.12.18
[백준] 1449번: 수리공 항승 - Kotlin[코틀린]  (0) 2023.12.17
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 1743번: 음식물 피하기 - Kotlin[코틀린]
  • [백준] 1965번: 상자넣기 - Kotlin[코틀린]
  • [백준] 1072번: 게임 - Kotlin[코틀린]
  • [백준] 1213번: 팰린드롬 만들기 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      모듈러 곱셈 역원
      그래프 탐색
      유니온파인드
      BFS
      프림
      MST
      dfs
      그리디
      크루스칼
      스택
      재귀
      피보나치
      이분 탐색
      브루트포스
      그래프이론
      분리집합
      투 포인터
      우선순위 큐
      DP
      티스토리
      수학
      구현
      정렬
      백트래킹
      큐
      분할 정복
      문자열
      소수 판정
      에라토스테네스의 체
      누적 합
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 10451번: 순열 사이클 - Kotlin[코틀린]
    상단으로

    티스토리툴바