사용자 도구

사이트 도구


ps:problems:boj:13317

한 번 남았다

ps
링크acmicpc.net/…
출처BOJ
문제 번호13317
문제명한 번 남았다
레벨골드 3
분류

애드혹

시간복잡도O(1)
사용한 언어Python
제출기록29200KB / 68ms
최고기록52ms
해결날짜2021/09/23

풀이

  • 잘못된 알고리즘에 대한 저격 데이터를 생성하라는 문제. 입력값도 따로 없다
  • 문제에서 잘못 작성한 알고리즘은 벨만-포드 알고리즘 이다. 음수 사이클이 없다면, 루프를 N-1번 돌릴때까지는 업데이트가 있을수 있지만, 그 이후에는 더이상 업데이트가 되지 않아야 한다.
  • 하지만 문제의 오류 코드에서는 N-2번 루프를 돌리고 추가로 한번 더 반복했으니까, 총 N-1번 루프를 돌려 놓고서 업데이트가 있으니 음수 사이클이 있다고 주장한다. N-1번까지 업데이트가 되는 음수사이클이 없는 그래프를 찾으면 되는데, 간단한 것은 N개의 노드가 일직선 형태로 연결된 그래프이다. 모든 엣지의 가중치를 -1로 두고 벨만포드 알고리즘을 돌리면 마지막 끝에 있는 노드까지의 거리는 루프를 한번 돌때마다 1씩 줄어들어서, 최종적으로 N-1이 될때까지 갱신된다. 그러므로 이런 그래프를 만들어서 출력하면 된다,
  • 주의할 점은, 지문에 주어진 알고리즘 설명에는 없지만 코드를 보면, 데이터에 등장하는 순서대로 엣지들을 저장해놓고, 매 루프마다 저 엣지 순서대로 처리한다. 이말은, 1→2, 2→3, 3→4, …, N-1→N 와 같은 순서로 엣지들을 제공하면 이 모든 업데이트가 한번의 루프에 처리될수도 있다는 것이다. 이렇지 않고 N-1번의 루프동안 처리되도록 하려면, N-1→N, N-2→N-1, …, 1→2와 같은식으로 역순으로 엣지 정보를 주는 것이다.

코드

"""Solution code for "BOJ 13317. 한 번 남았다".

- Problem link: https://www.acmicpc.net/problem/13317
- Solution link: http://www.teferi.net/ps/problems/boj/13317

Tags: [AdHoc]
"""

N = 50

def main():
    print(N, N - 1)
    for i in reversed(range(1, N)):
        print(i, i + 1, -1)

if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
S X​ U Y K
 
ps/problems/boj/13317.txt · 마지막으로 수정됨: 2021/09/23 15:36 저자 teferi