반응형

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

** Javascript

 

 

 

1)

 

 프로그래머스를 알고 거의 첫번째로 푼 문제가 아닐까 싶다.

그 당시 javascript 메소드 활용을 잘 못하였다.

 

function solution(n) {
    var answer = '';
    for (var i=1; i<=n; i++) {
        if (i % 2 === 0) {
            answer += "박";
        } else {
            answer += "수";
        }
    }
    return answer;
}

 

 

 

2)

 

 

지금 다시 푼다면 이렇게 풀 것이다.

 

function solution(n) {
    const watermelon = "수박";
    return (n % 2) ? watermelon.repeat(Math.floor(n / 2)) + "수" : watermelon.repeat(n / 2);
}

 

 

 

 

추천을 많이 받은 풀이 중 더 좋은 것을 가져왔다.

 

function solution(n) {
    return '수박'.repeat(n/2) + (n%2 === 1 ? '수' : '');
}

 

 

 

 

 

** Python

 

 

def solution(n):
    return "수박" * (n // 2) + "수" if n % 2 else "수박" * (n // 2)

 

 

내 풀이는 위와 같은데 더 짧게 푼 사람들이 많았다.

 

 

def water_melon(n):
    return "수박"*(n//2) + "수"*(n%2)

(이 풀이가 내 마음의 베스트)

 

 

def water_melon(n):
    s = "수박" * n
    return s[:n]

 

 

 

** Java

 

 

java는 베스트 풀이를 변환해보았다.

 

 

class Solution {
    public String solution(int n) {
        return "수박".repeat((int) n / 2) + "수".repeat(n % 2);
    }
}

 

참고로 java11 부터 String::repeat 을 사용할 수 있다.

 

 

하지만 효율은 떨어지는 편이다.

 

 

 

Java 에서 string repeat하는 법을 검색했을 때 갓택오버플로우에서 추천하는 방법으로 아래 같은 방법이 있다.

 

repeated = new String(new char[n]).replace("\0", s);

 

 

보다시피 추천수가 후덜덜하다.

출처: https://stackoverflow.com/questions/1235179/simple-way-to-repeat-a-string

 

Simple way to repeat a string

I'm looking for a simple commons method or operator that allows me to repeat some string n times. I know I could write this using a for loop, but I wish to avoid for loops whenever necessary and a ...

stackoverflow.com

 

 

 

 

다른 풀이 중 추천을 두번째로 많이 받은 풀이가 위 방법을 응용한 풀이다.

 

public class WaterMelon {
    public String watermelon(int n){

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

 

 

위 풀이는 속도가 빠른 편이다.

 

 

 

 

반응형

+ Recent posts