Hayden's Archive

[알고리즘] 프로그래머스 : 수박수박수박수박수박수? 본문

Algorithm

[알고리즘] 프로그래머스 : 수박수박수박수박수박수?

_hayden 2020. 5. 12. 23:10

알고리즘 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12922

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


내가 작성한 코드

반복문을 쓰지 않고 풀 수 있는 방법이 없을까 고민해봤는데 방법을 찾지 못해서 for문을 돌려서 풀었다. 1부터 n까지 반복하면서 홀수일 때는 answer에 "수"를 더 하고 짝수일 때는 answer에 "박"을 더한다.

class Solution {
    public String solution(int n) {
        String answer = "";
        for(int i = 1; i <= n; i++){
            if(i % 2 == 1){
                answer += "수";
            }
            if(i % 2 == 0){
                answer += "박";
            }
        }
        return answer;
    }
}

 

 

더 좋은 방법이 없을까 해서 다른 사람의 코드를 봤다. 반복문을 사용하지 않고 깔끔하게 푼 코드가 있어서 감탄했다. 

Class WaterMelon {
    public String watermelon(int n){
        return new String(new char [n/2+1]).replace("\0", "수박").substring(0,n);
    }
}

먼저 n/2+1개의 공간을 가지는(예컨대 n=5라면 3개의 공간이 생성되고, n=6라면 4개의 공간이 생성된다.) char 배열을 인자값으로 생성자를 통해 String 객체로 만들어 반환한다.(n=5일 때 "\0\0\0"라는 값을 가지고, n=6일 때 "\0\0\0\0"라는 값을 가진다.

replace() 메소드를 사용하여 char형의 기본값인 "\0"을 "수박"으로 교체한다.

n=5라면 "수박수박수박"으로 초기화되었을 것이고, n=6이라면 "수박수박수박수박"이 초기화되었을 것이다. 

이 때, substring() 메소드를 사용하여 0번째 문자부터 시작해서 n번째 문자 앞까지 자른다.

그러면 n=5일 때 "수박수박수"가 되고 n=6일 때 "수박수박수박"이 된다.

참고 : 자바 API java.lang.String