Algorithm/프로그래머스

[프로그래머스] Level1) 수박수박수박수박수박수?

햄습햄 2021. 10. 24. 01:46

문제 설명

 

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

 

 

제한 조건

 

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

 


풀이 과정 (자바)

 

입력받은 n만큼 for문을 돌렸다.

이때, i 값이 짝수라면 '수', 홀수라면 '박'이 나오도록 처리했다.

 

 

결과

 

 


다른 사람의 풀이

 

입력받은 n을 2로 나누고, 1을 더한 길이인 char형 배열을 만들었다.

해당 char형 배열을 String으로 생성 후, 내부에 있는 '\0'을 '수박'으로 바꿨다.

(char형 배열에 왜 \0가 있음? => 해당 페이지 참고 사이트를 참고)

그리고 입력받은 n만큼 길이를 잘라 문자열을 만들어 반환했다.

 

더보기

만약 n이 5라면,

(5 / 2) +1 => 3 이다.

new char[3]으로 크기 3인 char형 배열이 생성된다.

 

\0가 3개 들어가게 되고, 이를 replace하면 "수박수박수박"이 된다.

이를 substring하면 "수박수박수"가 나온다.


char형 배열을 n/2+1로 생성한 이유를 생각해 보니,

예를 들어,

1을 12로 바꾸고, 제시한 문자열이 111이라고 하자.

111은 121212로 바뀌는데

111은 길이가 3이고, 121212는 길이가 6이다.

 

문제로 돌아와서,

'\0'을 '수박'으로 바꾸고, n이 4라고 하자.

(그러면 배열 크기가 3(= 4 / 2 +1)이 된다. => 문자열: \0\0\0)

 

\0\0\0은 수박수박수박으로 바뀌는데

\0\0\0은 길이가 3이고, 수박수박수박은 길이가 6이다.

 

=> 기존보다 변경 후에 길이는 2배가 된다.

     고로, 굳이 n만큼 char 배열을 만들 필요가 없다.

     (n이 커지면 더욱 비효율적으로 처리됨)


그러면 +1을 하는 이유는?

만약 n이 1인 경우, new char[1 / 2]가 되고 new char[0]이 된다.

배열을 선언할 때, 1 이상을 작성해야 하므로

new char[1 / 2 +1]하여 new char[1]로 생성했다.

 

 

기타

 

숫자가 커지면 for문을 돌릴 때, 현저히 속도가 느려졌다.

그에 비해 다른 사람의 풀이는 간략하고, 속도도 빠른 풀이법이라 효율적이라고 생각했다. 새로운 방법을 익힐 기회였다.