문자열 my_string
과 이차원 정수 배열 queries
가 매개변수로 주어집니다.
queries
의 원소는 [s, e]
형태로,
my_string
의 인덱스 s
부터 인덱스 e
까지를 뒤집으라는 의미입니다.
my_string
에 queries
의 명령을 순서대로 처리한 후의 문자열을 반환하는 solution
함수를 작성해 주세요.
my_string
은 영소문자로만 이루어져 있습니다.my_string
의 길이 ≤ 1,000queries
의 원소는 [s, e]
의 형태로 0 ≤ s
≤ e
< my_string
의 길이를 만족합니다.queries
의 길이 ≤ 1,000my_string | queries | result |
---|---|---|
"rermgorpsam" | [[2, 3], [0, 7], [5, 9], [6, 10]] | "programmers" |
예제 1번의 my_string
은 "rermgorpsam"이고 주어진 queries
를 순서대로 처리하면 다음과 같습니다.
[2, 3]
: "remrgorpsam"[0, 7]
: "progrmersam"[5, 9]
: "prograsremm"[6, 10]
: "programmers"따라서 "programmers"를 반환합니다.
문제 해결을 위해 다음과 같은 절차를 따랐습니다:
queries
배열의 각 명령을 순서대로 처리하여 부분 문자열을 뒤집습니다.function solution(my_string, queries) {
var answer = '';
let charArray = my_string.split('');
let subArray = [];
for(let i = 0; i < queries.length; i++) {
let s = queries[i][0];
let e = queries[i][1];
subArray = charArray.slice(s, e + 1).reverse();
for (let k = 0; k < subArray.length; k++) {
charArray[s + k] = subArray[k];
}
}
answer = charArray.join('');
return answer;
}
my_string.split('')
을 사용하여 문자열을 문자 배열로 변환합니다.queries
배열을 순회하면서 각 쿼리의 시작 인덱스 s
와 끝 인덱스 e
를 추출합니다.slice
메서드를 이용하여 s
부터 e
까지의 부분 배열을 추출하고, reverse
메서드를 사용하여 뒤집습니다.charArray
의 해당 위치에 덮어씁니다.이 방법을 통해 문제의 요구사항을 충족하는 올바른 결과를 얻을 수 있습니다. 예제에서 주어진 "rermgorpsam" 문자열과 queries
를 순서대로 처리하여 "programmers"라는 결과를 성공적으로 반환합니다.
아래는 프로그래머스 플랫폼에서 테스트 케이스를 통과한 결과입니다.
테스트 결과, 정확성 100%를 달성하며 모든 테스트 케이스를 통과하였습니다.
ChatGPT를 활용하여 코드를 평가하고, 모범답안을 출력해보았습니다.
문제의 요구사항을 충족하고 효율적으로 문제를 해결하기 위해 배열을 사용하여 부분 문자열을 뒤집는 방법이 모범 답안으로 제시됩니다.
function solution(my_string, queries) {
// 문자열을 변형하기 위해 배열로 변환
let result = my_string.split('');
for (const [s, e] of queries) {
// 부분 문자열을 뒤집기
while (s < e) {
[result[s], result[e]] = [result[e], result[s]];
s++;
e--;
}
}
// 배열을 문자열로 변환하여 반환
return result.join('');
}
my_string.split('')
을 사용하여 문자열을 배열로 변환합니다.[s, e]
를 구조 분해 할당을 통해 추출합니다.s
와 끝 인덱스 e
사이의 부분 문자열을 뒤집습니다. 배열의 요소를 교환하여 뒤집기를 수행합니다.당신의 코드는 문제를 정확히 해결하고 모든 테스트 케이스를 통과했습니다. 다음은 당신의 코드에 대한 평가입니다.
function solution(my_string, queries) {
var answer = '';
let charArray = my_string.split('');
// 범위를 뒤집는 함수
function reverseSubArray(arr, start, end) {
while (start < end) {
// 요소를 서로 교환
[arr[start], arr[end]] = [arr[end], arr[start]];
start++;
end--;
}
}
for (let i = 0; i < queries.length; i++) {
let s = queries[i][0];
let e = queries[i][1];
reverseSubArray(charArray, s, e);
}
answer = charArray.join('');
return answer;
}
answer
변수의 초기화는 문제의 요구 사항에 따라 유지합니다.reverseSubArray
함수를 추가하여 배열의 특정 범위를 뒤집는 기능을 별도로 분리했습니다. 이를 통해 코드의 가독성과 재사용성을 높였습니다.코딩 테스트 대비를 위해 작성된 코드로서 매우 잘 작성되었습니다. 일부 개선 사항을 반영하여 가독성과 유지보수성을 높일 수 있었습니다. 코딩 테스트에서는 정확성과 효율성뿐만 아니라 코드의 가독성과 유지보수성도 중요하기 때문에, 이러한 점들을 고려한 첨삭된 코드가 좋은 예시가 될 것입니다.