수박수박수 문제
길이가 n 이고, 수박수박수 와 같은 패턴을 유지하는 문자열을 리턴하는 함수를 완성시켜야한다.
문제를 보고 풀이하는데 많은 시간이 들지는 않았다. 기존 알고리즘을 풀었던 문제 유형과 비슷한 방식이였기 때문이다. n이란 값의 index를 넣어줘서 홀수면 '수'를 짝수면 '박'을 result에 더해주면서 if문과 else 문을 돌아가게 하고 다 돌아가게 되면 return해주면 됐다. 그런데 처음에 문제를 봤을 때 반복되는 부분을 보고 함수로 쓰면 안될까? 라는 마음이 들었다. 그래서 찾아보던 중 repeat이 있었고, repeat으로 문제를 풀려고 했다.
function solution(n) {
return '수박'.repeat()
}
repeat 다음에 어떤걸 써줘야 될지 모르겠어서 for문과 if문을 함께 써서 답을 만들었다. 그러고 나서 repeat으로 푼 사람이 없었나 찾아보던 중에 어떤 사람이 repeat으로 풀었었다.
function solution(n) {
return '수박'.repeat(n).substr(0,n)
}
repeat(n만큼).substr(시작인덱스,자를 문자열 개수)
그러니
n이 3이라면 수박수박수박 반복되어 나오는데
substring에서 시작인덱스 0인 수 부터 자를 문자열 개수 3을 넣어 수박수를 자른다. 그럼 답은 수박수로 나온다
메소드를 이용하면 훨씬 간단하게 답을 도출할 수 있다.
나는 repeat 하나만 써야되나 싶어서 저 repeat을 이용해 어떻게 해야되나 고민을 했는데 그게 아니라 그 뒤에 같이 붙여주면 repeat을 먼저 실행하고, substr을 실행 할 수 있는 것을 알았다. 내 코드만 풀이하고 끝나는게 아니라 다른 사람의 코드를 보고 공부하는 것은 나를 성장 시킬 수 있는 하나의 계기가 됨을 느꼈다.
한 가지 추가하자면 substr대신 substring을 넣어줘도 정답 처리가 된다.
-substr : 시작인덱스, 길이
-substring : 시작인덱스, 종료인덱스
뒤에 value가 다름에도 불구하고 똑같이 정답 처리되는 이유는 문제가 반복되는 문제이기도 하고,
substring은 수박수라면 종료인덱스가 n=3이라면 index가 2까지 들어가고
substr도 마찬가지로 길이가 n까지면 index는 길이-1이기 때문에 결과적으로 같다.
아마 다른 문제에서는 다르게 써줘야겠지만 이 문제 같은 경우에는 둘 중 아무거나 써줘도 괜찮을 것 같다.