알고리즘-2021/04/17
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s return "try hello world" "TrY HeLlO WoRlD" 입출력 예 설명 "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
첫번째 풀이
function solution(s) {
//일단 split("")해서 문자가 들어간 배열로 만들자
//count변수를 이용해서 공백일때는 더하지 말자
//count변수를 이용해서 홀짝 여부를 판단해서 toLowerCase, toUpperCase메서드를 사용하자
let answer = '';
let strArr = s.split("");
let count = 0;
for(let i = 0; i < strArr.length; i++){
// if(strArr[i].charCodeAt(0) === 32){
// console.log(strArr[i].charCodeAt(0))
// }
if(strArr[i] !== " "){
count = i;
if((count) % 2 === 1){
//홀수인 경우 소문자
strArr[count] = strArr[count].toLowerCase();
console.log(`? : ${strArr[count]}`)
}
if((count) % 2 === 0){
strArr[count] = strArr[count].toUpperCase();
console.log(`! : ${strArr[count]}`)
//짝수인 경우 대문자
}
count += 1;
}
}
answer = strArr.join("");
return answer;
}
처음에는 문제를 잘못 이해하여 공백을 제외한 전체길이에서의 각 문자의 홀짝을 따지는 문제인 줄 알았다.
그래서 위와 같이 풀었고 큰 문제가 없겠거니 생각하고 돌렸으나 실패
두번째 풀이
function solution(s: string): string {
//각 단어의 짝 홀을 나누는거네 .. ㅂㄷㅂㄷ
//각 단어 별로 짝홀 나뉘어서 돌리고
//쟤네를 다시 붙여넣는 작업을 해야함
let stringArr = s.split(" ");
let newArr: string[][] = stringArr.map(function (element) {
return element.split("").map(function (el, idx) {
return idx % 2 !== 0 ? el.toLowerCase() : el.toUpperCase();
});
});
let newFormArr: string[] = [];
newFormArr = newArr.map((el) => el.join(""));
return newFormArr.join(" ");
}
분노가 느껴지는 주석이다
'각' 문자의 홀짝을 나눠서 풀어야한다. 그래서 결국.. 빨리 풀자는 마음에 이중반복문이 나왔다.
시간복잡도를 고려한 풀이는 언제쯤 짤까싶긴하지만 ..
다른 좋은방식이 있을 것 같긴한데 아마도 첫번째 방식에서 카운트만 잘 조절해주면 복잡도가 해결 될 것 같다.
여튼 끝!
참고
+
개인 깃허브에 올릴때 ts파일로 옮기고 있는데 일부 타입 미스가 있어서 새로운 newFormArr로 옮겨주는 작업으로 수정했다.
기존에는 newArr에 그대로 다시 할당을 해버리는 로직을 작성했는데 생각해보니 string[][] 에서 string[]를 할당하는 것이니 올바르지 않다고 판단됬다
Author And Source
이 문제에 관하여(알고리즘-2021/04/17), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cloudlee711/알고리즘-20210417-h1a5ks0h저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)