https://programmers.co.kr/learn/courses/30/lessons/12919
굉장히 쉬운 코드인데 글을 쓰게 된 이유는 문자열을 다루는데 기억해야하는게 있어서 입니다.
1. 문자열을 +로 붙히기
class Solution {
public String solution(String[] seoul) {
int kimIdx = getTargetNameIdx(seoul,"Kim");
return "김서방은 " + kimIdx + "에 있다";
}
int getTargetNameIdx(String[] names, String targetName) {
int idx = 0;
for (String name : names) {
if (name.equals(targetName)) {
return idx;
}
idx++;
}
return -1;
}
}
2. String.format 사용
class Solution {
public String solution(String[] seoul) {
int kimIdx = getTargetNameIdx(seoul,"Kim");
return String.format("김서방은 %d에 있다", kimIdx);
}
int getTargetNameIdx(String[] names, String targetName) {
int idx = 0;
for (String name : names) {
if (name.equals(targetName)) {
return idx;
}
idx++;
}
return -1;
}
}
3. StringBuilder 사용
class Solution {
public String solution(String[] seoul) {
int kimIdx = getTargetNameIdx(seoul,"Kim");
StringBuilder sb = new StringBuilder();
sb.append("김서방은 ");
sb.append(kimIdx);
sb.append("에 있다");
return sb.toString();
}
int getTargetNameIdx(String[] names, String targetName) {
int idx = 0;
for (String name : names) {
if (name.equals(targetName)) {
return idx;
}
idx++;
}
return -1;
}
}
4. StringBuffer 사용
- 동기화 처리로 인해 StringBuilder 보다 늦음
class Solution {
public String solution(String[] seoul) {
int kimIdx = getTargetNameIdx(seoul,"Kim");
return new StringBuffer().append("김서방은 ").append(kimIdx).append("에 있다").toString();
}
int getTargetNameIdx(String[] names, String targetName) {
int idx = 0;
for (String name : names) {
if (name.equals(targetName)) {
return idx;
}
idx++;
}
return -1;
}
}
3 경우를 보면 StringBuilder가 시간적인 측면에서 압도적인대 IDE에서는 StringBuilder를 String으로 변경가능하다고 표시해줍니다. 그럼 이는 String은 불변 인대 반해 StringBuffer, StringBuilder 는 가변 객체라는 문제가 있습니다. 심지어 StringBuilder 는 동기화 되어 있지않아서 멀티 쓰레드 환경에서 쓰레드 세이프 하지않기도 하죠.
사용 추천
String : 문자열 연산이 적고 멀티쓰레드 환경일 경우
StringBuffer : 문자열 연산이 많고 멀티쓰레드 환경일 경우
StringBuilder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우
한가지 더 기억할 것이 위의 표를 보면 String은 String pool 이라는 곳에 등록되어 동일한 String을 생성해도 메모리를 더 잡아먹지 않는 반면 나머지 두개는 만들때마다 메모리에 할당하게 됩니다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 거리두기 확인하기 문제(자바) (0) | 2021.09.07 |
---|---|
프로그래머스 - 다트 게임 문제 (자바) (0) | 2021.06.18 |
프로그래머스 - 110 옮기기 문제 (자바) (0) | 2021.06.15 |
프로그래머스 - 숫자 게임 문제 (자바) (0) | 2021.06.14 |
프로그래머스 셔틀버스 문제 (자바) (0) | 2021.06.07 |