본문 바로가기
카테고리 없음

[파이썬][백준] 9466 텀프로젝트 - 시간초과

by titaniumm 2020. 3. 27.

시간초과가 발생했다.

그 이유는 이중포문떄문일까...? 아직 잘 모르겠다. 

import sys
numtest =int(sys.stdin.readline())
count =0
for i in range(numtest):
    numstu = int(sys.stdin.readline())

    check = [False]*numstu
    stu_sel =list(map(int,sys.stdin.readline().split()))

    for j in range(numstu): # 매칭시 True로 만들기
        stack=[j]
        if check[stu_sel[j]-1] == False:
            while True:
                if check[stu_sel[j]-1] == False:
                    stack.append(stu_sel[j]-1)
                    j = stu_sel[j]-1
                elif check[stu_sel[j]-1] == True:
                    break
                if stack[0] == stack[-1]:
                    for k in stack:
                        check[k] =True
                    break
                if len(stack)>numstu:
                    break
        else:
            continue
    for k in check:
        if k == False:
            count +=1
    print(count)

좋은 코드로 공부

import sys
testcase = int(sys.stdin.readline())
for _ in range(testcase):
    n = int(sys.stdin.readline())
    choice = [0] + list(map(int, sys.stdin.readline().split()))
    visit = [0] * (n+1)
    group = 1
    for i in range(1, n+1):
        if visit[i] == 0:
            while visit[i] == 0: #while 두개로 반복
                visit[i] = group
                i = choice[i]
            while visit[i] == group:
                visit[i] = -1
                i = choice[i]
            group += 1
    cnt = 0
    for v in visit:
        if v > 0:
            cnt += 1
    sys.stdout.write("{}\n".format(cnt))


https://suri78.tistory.com/128

 

[백준알고리즘] 9466번: 텀 프로젝트 -Python

[백준알고리즘] 9466번: 텀 프로젝트 -Python https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원..

suri78.tistory.com

를 참고하였다.

댓글