이건 내가 풀었다..!!
그렇지만 다른 분들의 코드를 보니 더 효율적인 게 많았다.
나는 반복문을 이용한 방법을 생각했다!
그런데 다른 분들은 replace , substring 등 함수를 이용하여 더 효율적이고 간단한 알고리즘을 구축하였다.
보고 배워야지!
우선 문제를 보자!
문제
문제 설명
길이가 n이고, 수박수박수박수....와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를 들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다.
제한 조건
- n은 길이 10,000 이하인 자연수입니다.
입출력 예
nreturn
3 | "수박수" |
4 | "수박수박" |
나의 코드
class Solution {
public String solution(int n) {
String answer = "";
for(int i=1; i<n+1; i++){
if(i%2==1){
answer= answer+"수";
}else if(i%2==0){
answer=answer+"박";
}
}
return answer;
}
}
나는 이렇게 풀었다.. 그런데 2점밖에 못 받았다.
아직 효율성을 잘 따지지는 못하겠다.. 그래도 문제를 이해하고 내가 아는 지식으로 풀었다는 게 중요!!
나는 이런 식으로 풀었고
다른 분들의 코드도 알아보자!
replace/substring함수를 이용한 코드
public class WaterMelon {
public String watermelon(int n){
return new String(new char [n/2+1]).replace("\0", "수박").substring(0,n);
}
// 실행을 위한 테스트코드입니다.
public static void main(String[] args){
WaterMelon wm = new WaterMelon();
System.out.println("n이 3인 경우: " + wm.watermelon(3));
System.out.println("n이 4인 경우: " + wm.watermelon(4));
}
}
코드를 해석해보자!!
char [] cArr = new char [n/2+1] 은 n/2+1 길이만큼의 배열을 생성한다!
String s = new String(cArr)는 cArr을 갖는 String 인스턴스 생성을 의미한다!!
이 두 문장을 합친 것이라고 생각하면 편하다.. (?) 우선 난 잘 이해 못했다!! 더 알아보자!
Java에서 char의 default값은 '\u0000'이라고 되어있다.
'\u0000'는 유니코드의 첫 번째 문자로 아무런 문자도 지정되지 않은 NULL값을 의미한다.
그래서(== '\0') 이 된다.
String을 char배열로 초기하 하여 각 자리에 NULL이 들어간다
그래서 replace("\0", "수박")은 매 자리를 수박으로 바꾸는 것이 된다!
근데! 3 자리면 "수박수박수박"이 되어버리니깐 원하는 답이 아니다!
그래서 substring 매소드를 이용해 문자열의 0의 자리부터 n의 자리 전까지 잘라내어서 리턴하고 있다!
기본적인 Data Type와 Default Value에 대해 알고 있을 필요를 느꼈다! 그리도 매소드 함수 공부도 꾸준히 하자!
다음 마지막으로 삼항연산자를 이용한 코드를 봐보자!
public class WaterMelon {
public String watermelon(int n){
String result = "";
for (int i = 0; i < n; i++)
result += i % 2 == 0 ? "수" : "박";
return result;
}
// 실행을 위한 테스트코드입니다.
public static void main(String[] args){
WaterMelon wm = new WaterMelon();
System.out.println("n이 3인 경우: " + wm.watermelon(3));
System.out.println("n이 4인 경우: " + wm.watermelon(4));
}
}
삼항연산자와 for문을 이용해 만들어 낸 코드이다!!
내가 짠 코드와 비교해서 공부하자!!
감사합니다!!