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개를 뽑아내면 "수박수박"
'1d-1c > Programmers' 카테고리의 다른 글
Level1_두 개 뽑아서 더하기 (C++) (0) | 2021.04.05 |
---|---|
Level1_2016년 (JAVA) (0) | 2020.12.14 |
Level1_문자열 내림차순으로 배치하기 (JAVA) (0) | 2020.12.13 |
Level1_정수 제곱근 판별 (JAVA) (0) | 2020.12.13 |
Level1_다트게임 (JAVA) (0) | 2020.12.11 |