문제 정의
이번 문제에서는 'k', 'l', 'm' 세 글자만으로 구성된 문자열을 입력받는 JavaScript 함수를 작성해야 합니다.
함수가 수행할 작업은 문자열 속 모든 'k'를 'l'로, 'l'을 'k'로 서로 교환하되, 'm'은 원래 자리 그대로 유지하는 것입니다.
코드 구현
다음은 위 문제를 해결하는 코드입니다 −
const str = 'kklkmlkk';
const switchPositions = (str = '') => {
let res = "";
for(let i = 0; i < str.length; i++){
if (str[i] === 'k') {
res += 'l';
} else if (str[i] === 'l') {
res += 'k';
} else {
res += str[i];
};
};
return res;
};
console.log(switchPositions(str));동작 원리
이 코드의 핵심 로직은 다음과 같습니다.
- 빈 문자열 res를 결과 저장용으로 초기화합니다.
- for 반복문으로 입력 문자열의 각 문자를 하나씩 순회합니다.
- 현재 문자가 'k'라면 결과에 'l'을 추가하고, 'l'이라면 'k'를 추가합니다.
- 그 외의 문자(즉, 'm')는 변경 없이 그대로 추가합니다.
- 순회가 끝나면 완성된 문자열을 반환합니다.
정규식을 활용한 대안 방법
반복문 대신 replace() 메서드와 정규식을 조합하면 더 간결하게 표현할 수 있습니다.
const switchPositions = (str = '') =>
str.replace(/[kl]/g, ch => (ch === 'k' ? 'l' : 'k'));
console.log(switchPositions('kklkmlkk')); // llklmkll정규식 /[kl]/g는 문자열 전체에서 'k' 또는 'l'에 해당하는 모든 문자를 찾아내고, 콜백 함수가 각 문자를 반대 문자로 치환합니다. 'm'은 패턴에 포함되지 않으므로 자동으로 그대로 유지됩니다.
출력 결과
다음은 콘솔 출력 결과입니다 −
llklmkll