문제 : 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 |