[Java] 알고리즘, "수박수박수박수박수?"

반응형
반응형

수박수박수박수박수박수?

문제 설명

길이가 n이고, 수박수박수박수....와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다.


제한 조건

n은 길이 10,000이하인 자연수입니다.


입출력 예

 n

 return

 3

수박수

 4

수박수박 


나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
  public String solution(int n) {
      StringBuilder answer = new StringBuilder("");
      for(int i =1; i<=n; i++){
          if(i%2==0){
              answer.append("박");
          }else{
              answer.append("수");
          }
      }
      return answer.toString();
  }
}
cs

1을 n이 될때까지 증가시키는 for문을 돌리고 짝수일 때 "박", 홀수일 때 "수"를 계속 이어나가면 됩니다. 

** 여기서 중요한 점이 String answer =""; 를 선언하고 answer +="박"; 이런식으로 코딩을 해도 무방합니다. 하지만 속도를 더 높여 보다 빠른 연산을 위해서 StringBuilder를 사용했습니다. 

간단히 결론만 말하면, String 객체에 + 연산을 하는 것보다 StringBuilder 객체를 append하는 과정이 더 빠르다고 합니다. String 객체에 +하는 과정이 StringBuilder를 생성해서 append하는 과정을 포함하는 과정이므로 더 빠르다고 알고 있습니다. 자세한 내용은 나중에 따로 주제를 잡고 포스팅하도록 하겠습니다.


다른사람의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
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));
    }
}
cs


이 return문을 보고 바로 이해가 되지 않아서 봤었는데 그동안 사용하지 않았던 방식이 2가지나 있어서 공부하는데 도움이 되었던 답이었습니다. 

첫째, new String()의 생성자 키워드 안에 char배열을 집어넣으면 String 객체로 변환이 된다.

둘째, 빈 char배열이 생성이 되면 그 안에는 null이(null은 당연히 안되는 거지만) 아니라 '\0'으로 먼저 생성되어진다.


char 배열 생성하실때 n/2+1로 홀짝 경우의 수를 생각하신것 같은데, 자세히 연구하다보니 뒤의 substring이 어차피 n까지 짤라낼것이기 때문에 그냥 new char[n]으로 선언했어도 무방할 것 같습니다.^^ 오랜만에 좋은 공부한것 같습니다.

반응형

댓글

Designed by JB FACTORY