[알고리즘]6 letterCapitalize, 7 convertListToObject, 8 convertDoubleSpaceToSingle
06_letterCapitalize
문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴해야 합니다.
- 단어는 공백으로 구분합니다.
- 연속된 공백이 존재할 수 있습니다.
- 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.
function letterCapitalize(str) {
let words = str.split(' ');
for (let i = 0; i < words.length; i++) {
if (words[i].length > 0) {
words[i] = words[i][0].toUpperCase() + words[i].substr(1);
}
}
str = words.join(' ');
return str;
}
주어진 문자열을 우선 공백을 기준으로 두고 나누었고, words 변수에 담았습니다. 이후 공백은 길이가 0이기 때문에, 해당되지 않는 문자들만 바꿔주었습니다.
split(' ')와 join(' ')를 적극 활용했다고 보면 되겠네요. 처음에 words[i].length가 왜 0보다 커야 하는지 이해가 가지 않아 끙끙댄 감이 있습니다. 결국 레퍼런스를 참조해야 했지요...
공백은 length가 0이다! 이 점만 기억하면 아래 8번 문제에서도 응용이 가능합니다.
07. convertListToObject
2차원 배열(배열을 요소로 갖는 배열)을 입력받아 각 배열을 이용해 만든 객체를 리턴해야 합니다.
인자 1 : arr
- 배열을 요소로 갖는 배열
- arr[i]는 string 타입을 요소로 갖는 배열
- arr[i].length는 0 또는 2
- arr[i]의 첫 번째 요소를 키, 두 번째 요소를 값으로 하는 객체를 리턴해야 합니다.
- 중복되는 키의 경우, 초기의 값을 사용합니다.
- 빈 배열을 입력받은 경우, 빈 객체를 리턴해야 합니다.
- arr[i]의 길이가 0인 경우, 무시합니다.
function convertListToObject(arr) {
// arr[i]의 길이가 0인 경우, 무시합니다.
//arr[i]의 첫 번째 요소를 키, 두 번째 요소를 값으로 하는 객체를 리턴해야 합니다.
let obj = {};
//arr[i]는 각 배열을 가리킨다.
//arr[i][0]는 각 배열의 1번째 녀석으로 객체의 키가 될 놈이다.
//arr[i][1]은 각 배열의 2번째 녀석으로 객체의 값이 될 놈이다.
for (let i = 0; i < arr.length; i++) {
if(obj[arr[i][0]]===undefined&&arr[i].length !==0){
obj[arr[i][0]] = arr[i][1]
}
}
return obj;
}
객체를 만들어준 뒤에, 그 객체 내부에 조건을 통과한 키와 값을 넣어줍니다.
08. convertDoubleSpaceToSingle
문자열을 입력받아 해당 문자열에 등장하는 두 칸의 공백을 모두 한 칸의 공백으로 바꾼 문자열을 리턴해야 합니다.
function convertDoubleSpaceToSingle(str) {
//문자열을 입력받아 해당 문자열에 등장하는 두 칸의 공백을
//모두 한 칸의 공백으로 바꾼 문자열을 리턴해야 합니다.
//두 칸의 공백을 한 칸으로 만든다?!
return str.replace(/ +/g, " ");
}
replace()와 정규식을 함께해서 공백을 제거했습니다. replace()의 사용법만 알고 있다면 어려운 문제는 아니네요.
replace(찾을 값, 바꿀 값); 이런 식으로 활용되는데, 빈 칸이 두 개일 때를 정규식의 /g를 붙여 찾은 뒤 빈칸 하나로 바꿔 주었습니다. 여기서 /g는 글로벌의 약자로, 정규식에서 모든 패턴을 체크한다는 뜻입니다.
예시를 더 볼까요?
.replace(/,/g,'')하면 ,를 제거하는 식으로 작동합니다.
string.replace(/name | age | gender/g , '')
위와 같이 name, age, gender 이라는 글자가 있다면 전부 없애달라는 코드로도 활용 가능합니다.
정규식에 쓰이는 문자
g | 모든 패턴 확인(global) |
i | 대소문자 구별 없이 확인 |
m | 여러 줄 확인 |
^ | 처음 |
$ | 끝 |
. | 한 문자 |
여담으로, 아래와 같은 풀이도 가능하다고 합니다. filter과 공백의 length를 활용한 식입니다.
function convertDoubleSpaceToSingle(str) {
let result = str.split(" "); //공백 1칸으로 바꿔준다.
result = result.filter((e) => e.length !== 0);
// 공백 1칸의 길이는 0이니까 제외
result = result.join(" "); //공백 1칸으로 다시 join
return result;
}