실제로 JAVA로 코딩 연습을 하면서
같은 역할을 하는데 연산 속도가 늘어나는 경우를 적어본다.
< 객체 타입을 바꾸는 연산들 >
StringBuilder 에 두 개의 integer 를 넣어야 하는 일이 있었다.
int a = 1; int b = 2;
StringBuilder sb = new StringBuilder();
위의 상황에서 결과값으로 12 를 출력하기 위해 아래와 같이 했는데
sb.append(String.valueOf(a)+b);
시간이 엄청나게 길어졌다. 그래서 아래처럼 바꿨다.
sb.append(a); sb.append(b);
시간이 대폭 줄었는데, 이로 미뤄보아 String.valueOf 가 엄청나게 무거운 연산인 것 같다는 생각이 듦. 객체의 타입을 바꾸는 연산(Integer.valueOf 나 Double.valueOf.... etc) 은 되도록 사용하지 말아야 겠다는 생각. (parseOf 는 얼마나 오래걸리는지 보지 못함)
|
< 두 값 중 최대값은? >
두 int 변수에서 큰 값을 구하려고
Math.max(a,b)
이렇게 했는데 시간이 좀 오래 걸려서 아래처럼 함.
int max = a; if(a<b) max = b;
또한 3항연산자를 사용하여 더 큰 값을 구하는 경우도 있었는데 효율이 좋지 못했음. 3항연산자는 되도록 쓰지 말아야겠더라.
|
< StringBuilder vs StringBuffer >
StringBuffer 는 multi-thread 환경에서 안전할 수 있도록 thread-safe 하기 때문에 연산 처리가 느리고 StringBuilder 는 thread-safe 하지 않기 때문에 연산 처리가 빠르다.
따라서 코딩 인터뷰를 볼 때 multi-thread 같은 환경 조건인지 보고 더 나은 것을 선택하는 게 좋겠다.
|
< length >
String str = "abcde" 가 있다. 이 str 을 charAt으로 하나씩 뽑아서 출력한다고 하자.
for(int i=0; i<str.length(); i++)
위의 for문에서, 중간 연산 length 가 계속 호출되기 때문에 성능에 악영향을 준다. 아래처럼 size 를 미리 계산해 둔 다음에 그 값을 계속 이용하는 것이 낫다.
int size = str.length(); for(int i=0; i<size; i++)
|
'Coding Interview' 카테고리의 다른 글
[Coding Interview] 비트 관련 문제 (0) | 2020.01.26 |
---|---|
[Coding Interview] 트리 관련 문제 (0) | 2020.01.26 |
[leetcode] linked-list-cycle (0) | 2020.01.19 |
[Coding Interview] 연결리스트 관련 문제 (0) | 2019.12.27 |
[Coding Interview] 문자열 관련 문제 (0) | 2019.12.27 |