문제 :
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
조건 사항:
n은 길이 10,000이하인 자연수입니다.
입출력 예시
n : 3, 4
return : "수박수", "수박수박"
function solution(n) {
var word; // 각 문자를 저장할 변수
var answer = ''; // 반환된 각문자를 합칠 변수
for (var i = 0; i < n; i++) { // i:인덱스 0으로지정(배열("수박수박수...")) i < n:문자열 길이와 같거나 커지면 for문 중단(이유?! 배열의 가장 끝 index는 0부터 시작이므로 n(문자열 길이) - 1이 된다.)
if (i%2 == 0) { // 나머지가 0일때 '수' 문자 반환
word = '수';
} else { // 그렇지 않으면 '박' 문자 반환
word = '박';
}
answer += word; // 각 문자가 반환되었을때 변수에 계속 할당
word = ''; // for문 진행되는동안 i=0,i=1 각 단계가 진행이 끝나면 word 변수 빈문자열로 초기화
}
return answer;
}
function solution(n) {
var word;
var answer = '';
for (var i = 0; i < n; i++) {
word = i%2 == 0 ? word = '수' : word = '박';
// 삼항 조건 연산자를 통해 if문 간결화.
answer += word;
word = '';
}
return answer;
}
function solution(n) {
var answer = '';
var word = '수박';
answer = word.repeat(n/2 + 1).substr(0, n);
// '수박'을 반복하여 해당 문자열을 잘라서 반환.
// answer = '수박'.repeat(n/2 + 1).substring(0, n);
// answer = '수박'.repeat(n/2 + 1).slice(0, n);
// 모두 같은 결과 값을 가진다.
return answer;
}
word.repeat(n/2 + 1);
n/2 + 1를 입력한 이유?!
'수박'을 반복으로 계속 돌릴예정인데
ex) n=3, n/2 == 1.5,
word.repeat(n/2); // 결과 : '수박'
n=3 이면 '수박수'가 반환이 되어야하는데
처음부터 반복된 반환값이 '수박'이면 '수'라는 문자가 없는 상태이여서
저는 여기서 n/2 + 1 을 하여 '수박수박'를 반환하여 '수박수' 까지만 잘라서 반환하려고 해서 n/2에 1을 더해서 반복을 한번더 진행 했습니다.
word.repeat(n/2 + 1).substr(0,n);
substr(0,n)
문자열 처음부터 입력받은 문자열 길이만큼 잘라서 해당 문자열을 반환한다.
ex) n=3 일때
word.repeat(n/2 + 1); // 결과 : '수박수박'
word.repeat(n/2 + 1).substr(0, n); // 결과 : '수박수'
substr(추출하고자 문자 시작위치, 추출할 문자의 총 길이);
코드리뷰
1. 해당 문제를 풀면서 for문, if문을 이용하여 문제를 풀수도 있지만
저희는 자바스크립트의 String 객체의 메서드를 사용하여 해당 코드를 같은 결과가 나오더라도 훨씬 간결하게 작성할 수 있다.
2. 자바스크립트의 내장객체의 메서드들을 잘 확인해 잘 이용하자!!!
참조 사이트 :
https://poiemaweb.com/js-string