[Level1]수박수박수박수박수박수
by EastGlow
문제
water_melon함수는 정수 n을 매개변수로 입력받습니다. 길이가 n이고, 수박수박수…와 같은 패턴을 유지하는 문자열을 리턴하도록 함수를 완성하세요. 예를들어 n이 4이면 ‘수박수박’을 리턴하고 3이라면 ‘수박수’를 리턴하면 됩니다.
풀이 1
public class WaterMelon {
public String watermelon(int n){
StringBuilder sf = new StringBuilder();
// Case 1
for(int i=1; i<=n; ++i){
if(i%2 != 0){
sf.append("수");
}else{
sf.append("박");
}
}
// Case 2
for(int i=1; i<=n; ++i){
sf.append(i%2 != 0 ? "수":"박");
}
return str.toString();
}
// 실행을 위한 테스트코드입니다.
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));
}
}
나름 쉬웠던 문제이다. (아직 레벨1이니 쉬울 수 밖에;) 문자열을 합쳐야하기 때문에 String 보다는 StringBuilder를 이용했고 int n의 값을 2로 나누어 홀, 짝수를 구분한다. 그리고 홀수면 “수”, 짝수면 “박”을 합쳐준다.
풀이 2
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));
}
}
이 풀이는 처음에 봤을 때 뭔가 싶었다. 찾아보니 new String(new char[n/2+1])을 해주면 n-1만큼의 char배열이 생기고 그것을 String으로 new 연산해주면 배열 길이만큼의 null값이 생기게 되는 것 같다. (n/2+1말고 그냥 n-1해도 되는 것 같은데…) 아무튼 null은 char 자료형에선 ‘\0’과 같아서 replace를 뒤에 쳐주는 것이고 substring으로 맨 앞에서 부터 배열 길이-1 만큼 잘라주는 것이다.
3줄 이상의 코드가 1줄로 줄어버리니… 정말 저런걸 두고 잘 짰다고 하는 것 같다.
Subscribe via RSS