奇妙な文字を作成
プログラマ
https://programmers.co.kr/learn/courses/30/lessons/12930
私の答え
function solution(s){
//모두 소문자로 변환
//문자열을 공백을 기준으로 끊어서 배열에 저장
//배열의 요소를 하나씩 꺼내와서 짝수번째를 대문자로 바꿔 새로운 배열에 저장
//배열의 각 요소에 대한 반복이 끝나면 공백 추가
//배열의 요소를 공백을 기준으로 합친다
//마지막에 추가된 공백은 잘라준다
s = s.toLowerCase();
const arr = s.split(" ");
const res = [];
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr[i].length;j++){
if(j%2===0){
res.push(arr[i][j].toUpperCase());
}else{
res.push(arr[i][j]);
}
}
res.push(" ");
}
return res.join("").slice(0,-1);
}
試した他の方法
偶数の2番目の文字を大文字に置き換えるにはreplaceメソッドを使用します。
replace
メソッドは、正規表現が使用されていない場合、1番目のパラメータと一致する1番目の文字列(文字列)が2番目のパラメータ(文字列)に置き換えられた文字列を返します.(既存の文字列は置換されません)したがって、インデックスが偶数の場合に文字を大文字に変換しようとしても、
replace
は、文字に一致する文字を最初から検索し、先に大文字に変更します.下図に示すように、予想される結果は
AaAaAa
であるが、replace
メソッドの特性により、前から順に大文字になる. したがって、以下に記述するコードでは、
arr[i][j]
に一致する文字がjの前(奇数の2番目の文字であっても)であれば大文字に変換され、正規表現を使用しなければ所望の結果は生成されない.for(let i=0;i<arr.length;i++){
for(let j=0;j<arr[i].length;j++){
if(j%2===0) {
arr[i] = arr[i].replace(arr[i][j], arr[i][j].toUpperCase());
}
}
}
文字列の変更
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr[i].length;j++){
if(j%2===0) {
if(j%2===0) arr[i][j]=arr[i][j].toUpperCase();
}
}
リファレンス
「任意の配列文字列」でプログラマの問題を置き換える👇
https://velog.io/@kaitlin_k/%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%82%B4-%EB%A7%88%EC%9D%8C%EB%8C%80%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0
for(let i=0; i<strings.length; i++){
strings[i] = strings[i].replace(strings[i][0],""); // 앞에 추가된 문자 배열에 넣어주기
answers.push(strings[i])
}
上記の解答では、0番目の文字だけが空の文字列に変更されたため、正常に動作します.(replace
は前から1つしか変更できませんが、0番目なので1つ目です!)正規表現を使用しない場合に
replace
を使用する場合は、最初に置換する文字列(最初のパラメータ値)を使用するか、重複していない場合に使用するのが適切です.Reference
この問題について(奇妙な文字を作成), 我々は、より多くの情報をここで見つけました https://velog.io/@kaitlin_k/이상한-문자-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol