본문 바로가기

Algorithm/Programmers

[Lv 1] 직사각형 별 찍기

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12969

 

프로그래머스

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

programmers.co.kr

 

단순하게 2중 for loop를 사용하면 해결은 되는 문제이긴하다.

 

내 풀이

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    
    for(var i = 0; i < b; ++i){
        for(var j =0; j < a; ++j){
            process.stdout.write("*")
        }
        process.stdout.write('\n')
    }
    
});

위 코드로도 해결은 된다. 그러나 다른 사람의 풀이를 보며 조금 더 학습해보자 

 

프로그래머스 스쿨 내의 다른 사람의 풀이

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    const star = `${'*'.repeat(a)}\n`;
    console.log(star.repeat(b));
});

 

Javascript Standard String의 String.prototype.repeat() method 를 사용했다. 

(React를 계속했으면서 여태 JS String에 이런 메소드가 있는줄도 몰랐다.. 반성하게된다) 

 

String.prototype.repeat() : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/repeat 

 

좀 더 나아가서 성능을 보자 나는 어디선가 js의 반복을 위한 방법 중 일반 for loop가 가장 빠르다고 들은적이 있어서 일반 for loop 가 가장 성능이 좋을 것이라고 생각했다.

 

for loop 성능

테스트 1 통과 (48.68ms, 29MB)
테스트 2 통과 (47.98ms, 29.1MB)
테스트 3 통과 (46.69ms, 29.3MB)
테스트 4 통과 (46.25ms, 29.1MB)
테스트 5 통과 (45.98ms, 29MB)
테스트 6 통과 (48.20ms, 29.2MB)
테스트 7 통과 (47.11ms, 29.1MB)
테스트 8 통과 (93.98ms, 35MB)
테스트 9 통과 (163.34ms, 35.9MB)
테스트 10 통과 (98.10ms, 34.8MB)
테스트 11 통과 (140.63ms, 36.6MB)

String.prototype.repeat() 성능 

테스트 1 통과 (46.08ms, 29MB)
테스트 2 통과 (46.05ms, 29MB)
테스트 3 통과 (48.64ms, 29.1MB)
테스트 4 통과 (48.48ms, 29.1MB)
테스트 5 통과 (46.64ms, 28.9MB)
테스트 6 통과 (47.28ms, 29.3MB)
테스트 7 통과 (48.15ms, 29.3MB)
테스트 8 통과 (46.98ms, 29.1MB)
테스트 9 통과 (46.83ms, 29.1MB)
테스트 10 통과 (46.15ms, 29MB)
테스트 11 통과 (49.25ms, 29.2MB)

예상치 못하게 String.prototype.repeat() 의 성능이 훨씬 좋았다 심지어 메모리도 더 적게 사용하는 것을 볼 수 있다. 

 

성능에 대해 구글링을 해보니 브라우저마다 다르고, 반복을 하는 상황마다 다르다고는 하는데 정확한 정보는 찾을 수 없었다.

 

이 결과만 봤을 때 String.prototype.repeat() 성능도 훨씬 뛰어나고, 코드블럭을 줄여 가독성을 높일 수 있는 method 라는 생각이 든다. 업무 할 때는 구현이 급하다보니 알고 있던 method들만 사용하게 되는데 repeat 이외에도 내장 method 들을 한번 살펴보고 업무에도 사용할 수 있도록 해야겠다. 

'Algorithm > Programmers' 카테고리의 다른 글

[lv 1] 여러 기준으로 정렬하기  (0) 2022.08.31
[Lv 1] 상위 n개 레코드  (0) 2022.08.30
[Lv 1] 행렬의 덧셈  (0) 2022.08.04
[Lv 1] 두개 뽑아서 더하기  (0) 2022.07.07
[Lv 1] x만큼 간격이 있는 n개의 숫자  (0) 2022.07.07