-
#AIL_23.12.08 // Programmers_수박수박수박수박수박수?AIL( Algorithm I Learned) 2023. 12. 8. 23:43
## AIL_ 수박수박수박수박수박수?
*** 문제 설명
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
*** 제한 조건
n은 길이 10,000이하인 자연수입니다.
*** 입출력 예
n return 3 "수박수" 4 "수박수박"
## solution.JavaScript
1. 문제의 접근 방식
주어진 문제는 간단한 패턴을 가진 문자열을 생성하는 문제로, 주어진 규칙에 따라 "수"와 "박"을 번갈아가며 연결하면 됩니다. 1부터 n까지 순회하면서 홀수일 때는 "수", 짝수일 때는 "박"을 문자열에 추가합니다.
2. 문제풀이
function solution(n) { var answer = ''; for(let i = 1; i <= n; i++) { i % 2 === 1 ? answer += "수" : answer += "박" } return answer; } /* 테스트 1 입력값 〉 3 기댓값 〉 "수박수" 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 4 기댓값 〉 "수박수박" 실행 결과 〉 테스트를 통과하였습니다. */
1. 결과를 저장할 빈 문자열 `answer`를 초기화합니다.
var answer = '';
2. 반복문을 통한 문자열 생성
`1`부터 `n`까지의 숫자에 대해 반복문을 실행합니다.
for (let i = 1; i <= n; i++) {
3. 조건문을 사용한 패턴 결정
현재의 순서(i)다 홀수인지 짝수인지 판별하여, 홀수이면 "수"를 추가하고 짝수이면 "박"을 추가합니다. 삼항 연산자를 사용하여 간단히 처리하였습니다.
i % 2 === 1 ? answer += "수" : answer += "박";
4. 결과 반환하기
반복문이 끝나면 최종적으로 생성된 문자열을 반환합니다.
return answer;
3. 다른사람의 문제풀이 및 접근방식 분석
const solution = n => "수박".repeat(n).slice(0,n); /* 테스트 1 입력값 〉 3 기댓값 〉 "수박수" 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 4 기댓값 〉 "수박수박" 실행 결과 〉 테스트를 통과하였습니다. */
1. "수박" 문자열 반복 (repeat)
"수박" 문자열을 n번 반복합니다. 예를 들어, n이 3이면 "수박수박수박"이 됩니다.
"수박".repeat(n)
2. 문자열 자르기 (slice)
`slice(0, n)`은 해당 문자열을 처음부터 n개의 문자까지 자르는 역할을 합니다. 따라서 "수박수박수박"에서 처음부터 3개의 문자를 자르면 "수박수"가 됩니다.
.slice(0, n)
3. 결과반환
최종적으로, 문자열 "수박"을 n번 반복하고, 그 중에서 처음부터 n개의 문자를 자른 결과를 반환합니다.
const solution = n => "수박".repeat(n).slice(0, n);
# repeat() 메서드란?
`repeat()` 메서드는 문자열을 주어진 횟수만큼 반복하여 새로운 문자열을 생성합니다.
# repeat() 사용예시
const str = "abc"; const repeatedStr = str.repeat(3); // "abcabcabc"
# repeat() 장단점
**장점
간단한 반복을 수행할 때 유용합니다.
**단점
반복 횟수를 동적으로 조절하기 어렵고 반복 횟수가 음수이거나 무한히 큰 경우 에러가 발생할 수 있습니다.
# repeat() 상황에 따른 선택
**사용 시점
반복 횟수가 고정되어 있고, 간결한 코드가 필요한 경우에 적합니다. 동일한 문자열을 일정 횟수만큼 반복할 때 사용합니다.
# slice() 메서드란?
문자열의 일부를 추출하여 새로운 문자열을 반환하며, 시작 인덱스부터 끝 인덱스까지 부분 문자열을 반환합니다.
# slice() 사용예시
const str = "abcdefgh"; const slicedStr = str.slice(2, 5); // "cde"
# slice() 장단점
**장점
문자열의 일부를 쉽게 추출하며, 시작과 끝 인덱스를 조절하여 다양한 문자열 조작이 가능합니다.
**단점
조작이 복잡해질 경우 코드가 길어질 수 있습니다.
# slice() 상황에 따른 선택
**사용 시점
특정 부분 문자열을 추출하거나, 문자열을 잘라내야 할 때 적합하며 반복 횟수가 동적으로 변화는 경우에 활용 가능합니다.
# 일반적인 선택 기준
`repeat`은 단순한 반복에 적합하고, 반복 횟수가 정적인 경우에 사용합니다.
`slice`는 문자열을 조작해야 할 때. 또는 반복 횟수가 동적으로 변할 때 활용됩니다.
# 주의사항
`repeat`은 사용할 때 반복 횟수에 대한 유효성을 체크해야 합니다.
`slice`는 사용할 때 인덱스를 정확히 지정하여 원하는 부분 문자열을 얻을 수 있도록 주의해야 합니다.
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_23.12.11 // Programmers_문자열 내림차순으로 배치하기 (1) 2023.12.11 #AIL_23.12.10 // Programmers_약수의 개수와 덧셈 (0) 2023.12.10 #AIL_23.12.07 // Programmers_가운데 글자 가져오기 (0) 2023.12.07 #AIL_23.12.06 // Programmers_하노이의 탑 (1) 2023.12.06 #AIL_23.12.05 // Programmers_제일 작은 수 제거하기 (0) 2023.12.06