====== 착신 전환 소동 ====== ===== 풀이 ===== * 얼핏 순열 사이클 분할이 필요한 문제로 착각할 수 있는데, 실제로는 훨씬 더 간단하다. * 모든 전화기에 착신전환이 걸려있기만 하다면, 전환이 끝나지 않고 계속 이어지므로 무한 대기 상태가 된다. * 착신 전환이 걸려있지 않는 전화기들을 모두 찾아서, 다른 전화기로 착신전환을 걸어주기만 하면 된다. (아무 전화기에나 걸어도 상관 없다) * 시간 복잡도는 O(n) ===== 코드 ===== """Solution code for "BOJ 31409. 착신 전환 소동". - Problem link: https://www.acmicpc.net/problem/31409 - Solution link: http://www.teferi.net/ps/problems/boj/31409 Tags: [ad hoc] """ def main(): N = int(input()) a = [int(x) for x in input().split()] count = 0 for i, a_i in enumerate(a): if i == a_i - 1: a[i] = i count += 1 if a[0] == 0: a[0] = N print(count) print(*a) if __name__ == '__main__': main() {{tag>BOJ ps:problems:boj:실버_3}}