[Java] 알고리즘, "수박수박수박수박수?"
- 알고리즘 문제/[Java] 알고리즘
- 2019. 2. 7. 22:01
수박수박수박수박수박수?
문제 설명
길이가 n이고, 수박수박수박수....와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다.
제한 조건
n은 길이 10,000이하인 자연수입니다.
입출력 예
n |
return |
3 |
수박수 |
4 |
수박수박 |
나의 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution { public String solution(int n) { StringBuilder answer = new StringBuilder(""); for(int i =1; i<=n; i++){ if(i%2==0){ answer.append("박"); }else{ answer.append("수"); } } return answer.toString(); } } | cs |
1을 n이 될때까지 증가시키는 for문을 돌리고 짝수일 때 "박", 홀수일 때 "수"를 계속 이어나가면 됩니다.
** 여기서 중요한 점이 String answer =""; 를 선언하고 answer +="박"; 이런식으로 코딩을 해도 무방합니다. 하지만 속도를 더 높여 보다 빠른 연산을 위해서 StringBuilder를 사용했습니다.
간단히 결론만 말하면, String 객체에 + 연산을 하는 것보다 StringBuilder 객체를 append하는 과정이 더 빠르다고 합니다. String 객체에 +하는 과정이 StringBuilder를 생성해서 append하는 과정을 포함하는 과정이므로 더 빠르다고 알고 있습니다. 자세한 내용은 나중에 따로 주제를 잡고 포스팅하도록 하겠습니다.
다른사람의 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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)); } } | cs |
이 return문을 보고 바로 이해가 되지 않아서 봤었는데 그동안 사용하지 않았던 방식이 2가지나 있어서 공부하는데 도움이 되었던 답이었습니다.
첫째, new String()의 생성자 키워드 안에 char배열을 집어넣으면 String 객체로 변환이 된다.
둘째, 빈 char배열이 생성이 되면 그 안에는 null이(null은 당연히 안되는 거지만) 아니라 '\0'으로 먼저 생성되어진다.
char 배열 생성하실때 n/2+1로 홀짝 경우의 수를 생각하신것 같은데, 자세히 연구하다보니 뒤의 substring이 어차피 n까지 짤라낼것이기 때문에 그냥 new char[n]으로 선언했어도 무방할 것 같습니다.^^ 오랜만에 좋은 공부한것 같습니다.
'알고리즘 문제 > [Java] 알고리즘' 카테고리의 다른 글
[Java] 알고리즘, "시저 암호" (0) | 2019.02.10 |
---|---|
[Java] 알고리즘, "서울에서 김서방 찾기" (0) | 2019.02.09 |
[Java] 자바 알고리즘, "문자열 다루기 기본" (2) | 2019.02.06 |
[Java] 자바 알고리즘, "문자열 내 p와 y의 개수" (0) | 2019.02.06 |
[Java] 자바 알고리즘, "두 정수 사이의 합" (0) | 2019.02.06 |