Algospot에서 이 문제 (https://algospot.com/judge/problem/read/ZEROONE) 를 풀려다 보니 IO가 느려서 시간 초과가 계속 떴다.
리플들을 보니 StringTokenizer를 이용해 시간을 줄이려고 노력했다는 것을 보았는데 난 부끄럽게도 이 Class를 본 적이 없으므로 찾아보았다.
근데 IO랑 뭔 상관인지는 잘 모르겠다. 그냥 split보다 빠르게 하려고 StringTokenizer를 사용한 것 같다.
아무튼 이 글과 관련 없이 함수 별 IO 속도 차이를 보기 위해서는 여기를 참고하시라.
결론
- StringTokenizer: 형식이 정해진 문자열을 분리할 때 사용.
String.split(): 형식이 정해지지 않은 문자열을 분리할 때 사용. JDK1.4에 추가되었음.
속도: StringTokenizer > String.split()
- String.split()은 내부적으로 정규표현식을 사용하기 때문에 많은 처리가 필요할 경우 심하게 느려짐.
주의점
- StringTokenizer를 사용할 경우 parsing되는 데이터가 공백이라면 부적절하다. 데이터에 뭐라도 채워져 있어야 한다.
예시로 보자
|
|
결과는 이렇다
David에 대한 데이터를 보면 성별 정보를 빈 칸으로 해놓으니 StringTokenizer에서는 이를 무시해버렸다.
Mariad의 마지막 데이터도 마찬가지이다.
|
|