
알고리즘 코드카타 중 특정 문자열의 가운데 글자를 반환하는 함수를 만드는 문제를 풀었다.
특정 문자열의 위치에 관해서는 대괄호([]) 표기법만 사용해왔기에 새로운 접근을 위해charAt()메소드를 사용하여 풀이하는 방식을 선택했다. (대괄호 접근법이 더 많이 사용된다지만 아직 이것저것 써보고 알아가야 할 단계이니..~)
이 메소드가 기존 사용하던 대괄호 표기법과 어떤 차이가 있을지, 또 활용할 수 있는 예제는 어떤 것이 있을 지 참고하며 학습했다.
string.charAt(index);
: 문자열에서 1) 특정 위치의 문자를 개별로 확인/처리하거나 2) 문자열의 문자 반복 검사를 할 때 유용한 메소드다. 특히 문자열 내 특정 위치의 문자를 확인하거나 조건에 따라 작업을 수행할 때 유용하다.
string : 메소드를 호출하는 문자열index : 반환하고자 하는 문자의 위치(index)를 나타내는 0부터 시작하는 정수
"")을 반환
const str = "Hello, world";
console.log(str.charAt(0)); // "H" (1번째 문자)
console.log(str.charAt(7)); // "W" (8번째 문자)
console.log(str.charAt(12)); // "!" (13번째 문자)
console.log(str.charAt(20)); // "" (범위를 벗어남)
console.log(str.charAt(-1)); // "" (음수 인덱스는 빈 문자열 반환)
charAt() 메소드 대신 대괄호 표기법([])을 사용해 문자열의 문자에 접근할 수 있다.
const str = "Hello";
console.log(str[0]); // "H"
console.log(str.charAt(0)); // "H"
console.log(str[10]); // undefined (범위 벗어남)
console.log(str.charAt(0)); // "" (범위 벗어남)
charAt() : 범위를 벗어난 인덱스에 대해 빈 문자열 "" 반환undefined 반환
1. 특정 위치의 문자 검사
: 문자열에서 특정 인덱스에 있는 문자를 확인하고 조건에 따라 작업을 수행
const str = "Hello, World!";
// 0번째 문자가 'H'인지 확인
if (str.charAt(0) === 'H') {
console.log("문장은 'H'로 시작합니다.");
} else {
console.log("문장은 'H'로 시작하지 않습니다.");
}
2. 문자열의 문자 반복 검사
: 문자열을 순회하면서 각 문자를 검사하거나 처리할 때 사용
const str = "abc123";
for (let i = 0; i < str.length; i++) {
const char = str.charAt(i);
if (!isNaN(char)) { // 숫자인지 확인
console.log(`숫자 발견: ${char}`);
}
}
3. 대소문자 변환 및 비교
: 문자열 내 특정 문자의 대소문자를 확인하거나 변환할 때 유용
const str = "JavaScript";
for (let i = 0; i < str.length; i++) {
const char = str.charAt(i);
if (char === char.toUpperCase()) {
console.log(`대문자: ${char}`);
} else {
console.log(`소문자: ${char}`);
}
}
4. 특정 문자 개수 세기
: 문자열 내에서 특정 문자가 몇 번 등장하는지 확인
const str = "banana";
let count = 0;
for (let i = 0; i < str.length; i++) {
if (str.charAt(i) === 'a') {
count++;
}
}
console.log(`'a'의 개수: ${count}`);
결과
'a'의 개수 : 3
5. 문자열 시작 또는 끝 확인
: 문자열이 특정 문자로 시작하거나 끝나는지 확인할 때 사용
const str = "example.txt";
// 문자열이 .txt로 끝나는지 확인
if (str.charAt(str.length - 4) === '.' && str.slice(-3) === "txt") {
console.log("이 파일은 텍스트 파일입니다.");
}
6. 비밀번호 규칙 검사
: 비밀번호에 대문자, 소문자, 숫자, 특수 문자가 포함되었는지 검사할 때 활용
function checkPassword(password) {
let hasUpperCase = false;
let hasLowerCase = false;
let hasNumber = false;
for (let i = 0; i < password.length; i++) {
const char = password.charAt(i);
if (char >= 'A' && char <= 'Z') hasUpperCase = true;
else if (char >= 'a' && char <= 'z') hasLowerCase = true;
else if (!isNaN(char)) hasNumber = true;
}
if (hasUpperCase && hasLowerCase && hasNumber) {
console.log("비밀번호가 유효합니다.");
} else {
console.log("비밀번호는 대문자, 소문자, 숫자를 모두 포함해야 합니다.");
}
}
checkPassword("Password123");
7. 문자열 뒤집기
: 문자열을 뒤집는 데에도 사용
function reverseString(str) {
let reversed = "";
for (let i = str.length - 1; i >= 0; i--) {
reversed += str.charAt(i);
}
return reversed;
}
console.log(reverseString("Hello")); // "olleH"
8. 특수 문자 필터링
: 문자열에서 특수 문자를 제거하거나 특정 문자만 남기는 데 사용
const str = "Hello! How are you? 123.";
let filtered = "";
for (let i = 0; i < str.length; i++) {
const char = str.charAt(i);
if (char.match(/[a-zA-Z0-9\s]/)) { // 영문자, 숫자, 공백만 허용
filtered += char;
}
}
console.log(filtered); // "Hello How are you 123"
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
- 제한 사항
: s는 길이가 1 이상, 100이하인 스트링입니다.- 입출력 예
: "abcde" > return "c"
: "qwer" > return "we"
function solution(word) {
let wordsLength = word.length;
if(wordsLength % 2 === 0){
return word.charAt(wordsLength / 2 - 1) + word.charAt(wordsLength / 2);
} else {
return word.charAt(wordsLength / 2);
}
}
위처럼 작성하여 제출한 뒤 다른 사람의 풀이를 봤다.
function solution(s) {
return s.substr(Math.ceil(s.length / 2) - 1, s.length % 2 === 0 ? 2 : 1);
}
좋아요 92개를 받은 풀이다 🤯 천재같군.. substr 의 잘라낼 length 부분을 삼항연산자로 구현한게 인상깊었다.. 아직 삼항연산자를 써본 경험이 적어서 낯선건지 손이 안 가는 것 같다.. 조만간 삼항연산자와 함께 예제를 공부해서 많이 써보고 싶은 마음! 아쟈쟈