class Solution {
public String solution(int n) {
String result = "";
int k=0;
for(int i=0;i< n/2;i++){
result += "수박";
k++;
}
if(n- 2*k == 1){
result+="수";
}
return result;
}
}
n/2
까지만 돌고 "수박"을 한번에 추가하도록 하였다.이번 문제는 푸는 것은 쉬웠지만, 다른 사람의 풀이를 보면서 "이렇게도 풀 수 있겠구나!"라는 생각이 많이 들었다.
1. substring() 사용
class Solution {
String text =
"수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박수박...";
public String solution(int n) {
String answer = text.substring(0, n);
return answer;
}
}
2. 삼항 연산자 사용
class Solution {
public String solution(int n) {
String result = "";
for(int i=0;i< n;i++){
result += (i%2==0)? "수" : "박";
}
return result;
}
}
3. StringBuffer 사용
class Solution {
public String solution(int n) {
StringBuffer sf = new StringBuffer();
for(int i=1; i<=n;i++){
sf.append(i%2==1?"수":"박");
}
return sf.toString();
}
}
💡 문자열을 추가하거나 변경하는 작업이 많은 경우에는 String 대신에 StringBuffer를 꼭 쓰자!
단순히 읽는 조회 연산에서는 String 객체를 사용하는 것이 더 빠를 수 있다.
4. replace() + substring() 사용
class Solution {
public String solution(int n) {
return new String(new char [n/2+1]).replace("\0", "수박").substring(0,n);
}
}
new String(new char [n/2+1])
: String 생성자에 인자로 char 배열이 들어갈 수 있다는 것을 새롭게 알았다. n/2 +1 개의 배열을 생성하면 배열이 "\0"로 초기화된다.코딩테스트에서는 StringBuffer와 StringBuilder 중에 어떤 것을 사용해야 할지가 궁금해졌다.
StringBuffer와 StringBuilder의 메서드 사용 방법은 동일하다. 둘의 차이점은 멀티쓰레드에서 안전하냐 안 하냐의 차이라고 한다.
✔️ 현업에서는 StringBuffer를 사용하고, 코테에서는 StringBuilder를 사용하면 된다!(사실 성능 차이는 미미하기 때문에 StringBuffer를 사용해도 무관하다.)