smooth waters run deep

1d-1c/Programmers

Level1_수박수박수박수박수박수? (JAVA)

yeon_11 2020. 12. 14. 00:15
 

코딩테스트 연습 - 수박수박수박수박수박수?

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

programmers.co.kr

 

StringBuilder 이용
class Solution {
    public String solution(int n) {
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<n/2; i++){
            sb.append("수박");
        }
        
        if(n%2!=0)
            sb.append("수");
        
        return sb.toString();
    }
}

 

 

replace(), substring() 이용

'모든 풀이(다른 사람 풀이)' 에 두 번째 코드이다.

다른 사람은 어떻게 풀었나 참고하려고 보다가, 기억해둬야겠다 생각하게 된 코드!!

분명히 익숙한 replace, substring 인데! 이걸 이용할 생각을 나는 전혀 못했다ㅠㅠ

class Solution {
    public String solution(int n) {
        return makeanswer(n);
    }
    
    private String makeanswer(int n){
    	return new String(new char[n/2+1]).replace("\0","수박").substring(0,n);
    }
}

makeanswer() 함수 리턴값을 파헤쳐보자.

 

return new String(new char[n/2+1]).replace("\0","수박").substring(0,n);

 

return new String : 문자열(String)을 리턴

 

return new String(new char[n/2+1]) 

    : n/2+1크기의 char[]배열을 문자열(String)으로 바꾸어 리턴한다.

 

      n이 홀수일 때, n/2개의 "수박"과 1개의 "수"가 필요하다.

      예를 들어 설명하면, n=3일 때 출력은 "수박수"가 된다. (3/2개의 "수박" + 1개의 "수")

 

      n이 짝수일 때는 n/2개의 "수박" 만이 필요하다.

      짝수보다 1개의 "수"가 더 필요한 홀수에 초점을 맞추어 배열 크기를 결정한다. (n/2+1) 

 

 

String(new char[n/2+1]).replace("\0","수박")

    : n/2+1번 "수박"이 반복된 문자열을 만든다.

 

     char[] 배열 생성 시, 들어가는 값은 '\0' 이다.

     즉 n/2+1의 길이만큼 '\0'이 채워져있음을 알 수 있고, 이를 "수박"으로 바꾸면

     총 n/2+1개 만큼의 "수박"이 반복되는 문자열이 만들어진다.

 

    예) n=3일 때, "수박수박" 이 생성됨

          n=4 일 때, "수박수박수박" 이 생성됨

 

 

.substring(0,n) : 문자열을 0~n-1까지 자른다. == n개를 뽑아낸다.

 

    예) n=3일 때, "수박수박" 문자열에서, 3개를 뽑아내면 "수박수"

          n=4 일 때, "수박수박수박" 문자열에서, 4개를 뽑아내면 "수박수박"