Problem Solving

프로그래머스 코딩테스트 Level 1. 자바 문자열 합치기

돌돌김 2019. 1. 1. 02:26


문제 : 길이가 n이고, "수박수박수박수"와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 

예를들어 n이 4이면 "수박수박"을, n이 3이면 "수박수"를 리턴하면 됩니다.


문제를 해결하기 위해는 문자열의 결합을 알아야한다. 

C언어는 워낙 문자열 처리하는게 귀찮아서 문자열 관련 문제를 많이 피했어서 그런지 문자열 처리는 항상 익숙하지 않다.


개인적으로 파이썬이 문자열을 처리하는데 좋은 메소드들과 연산이 있다고 생각한다. 하지만 이제 Java를 배우는 기간이기 때문에 최대한 Java로 문제를 풀어보려고 한다.


예를들어 String s = "hello"; 이라고 해보자 


만약 hellohellohello , 즉 hello를 반복해서 3번 출력하려면 어떻게 해야할까?


안타깝게도 Java에서는 파이썬처럼 System.out.printf(s*3); 과 같은 문법을 지원하지 않는다.


처음으로 드는 생각은 반복문을 사용해서 출력 해 볼 수 있다.


for(int i =0; i<3; i++){

 System.out.printf(s);


하지만 이 방법은 문제를 해결하는데 효율적이라고 생각하지는 않는다. 

왜냐하면 n이 짝수인지 홀수인지에 따라 끝나는 문자가 "수", "박" 으로 다르기 때문이다. 


나는 StringBuffer 자료형을 활용하였다.

StringBuffer()와 append를 사용하면 문자열을 붙여나갈 수 있다.

이때 중요한 것은 문자열을 붙인결과를 .toString()을 통하여 String으로 반환해주어야 한다는 점이다.


StringBuffer과 StringBuilder의 차이와 장단점을 공부해보면 더 좋을거같다.



소스 코드는 다음과 같다.


class Solution {

  public String solution(int n) {

      String answer = "";

  StringBuffer st = new StringBuffer();

      while(true){

          st.append("수");

          n--;

          if(n==0)

              break;

          st.append("박");

          n--;

          if(n==0)

              break;

      }

      answer = st.toString();

      return answer;

  }

}