이문제인지 모르겠지만 일단 48-51번째 줄에서 입력 잘못받고계십니다.
공백이 들어오기때문에 split 또는 StringTokenizer시사용해서 잘라주시고 int x1 = str.charAt(?) - '0'; 이렇게 받아주셔야 올바른 정수값으로 입력됩니다!
지금 질문자님 코드는 공백을 입력받고 있습니다..
2162번 - 선분 그룹
이문제인지 모르겠지만 일단 48-51번째 줄에서 입력 잘못받고계십니다.
공백이 들어오기때문에 split 또는 StringTokenizer시사용해서 잘라주시고 int x1 = str.charAt(?) - '0'; 이렇게 받아주셔야 올바른 정수값으로 입력됩니다!
지금 질문자님 코드는 공백을 입력받고 있습니다..
그리고 시간 초과의 원인은 disjointset이 매우 비효율적으로 구현되었기 때문입니다. 지금처럼 아무런 최적화 기법이 없는 구현은 매 호출 시마다 최악의 경우 O(N)의 시간이 걸립니다.
심지어 더 있습니다. ArrayList.indexOf는 최악의 경우 리스트 전체를 순회해야 하는 메서드로 이 호출 자체가 O(N)입니다. 전체 코드는 그래서 O(N^4)이 됩니다. 애초에 지금의 find 함수는 u의 부모를 찾는 것이 아니고 u를 부모로 가지는 원소(즉, u의 자식 중 하나)를 찾는 것이므로 아예 틀린 구현인 것 같습니다. get 메서드를 사용해야 합니다.
Path compression이나 rank를 사용해서 시간복잡도를 단축해야 합니다.
아 죄송합니다 제가 문제를 제대로 안읽어봤네요 djm님 말씀이 맞고 입력을 공백기준쪼갠 것을 parse로 형변환해주시면 됩니다..
알맞는 형변환 관련해서도 몇개 찾아보시는 것을 추천드려요!
댓글을 작성하려면 로그인해야 합니다.
isvara 4년 전
입출력부분에서 시간이 나올리는 없을거같은데 4%부근까지가서 그냥 시간초과가 뜹니다.
N^2이면 9백만이면 이렇게 까지 막힐거같지는않는데 어디부분에서
시간을 잡아먹는걸까요 ??고수님들 지적부탁드립니다.