🔥 CodingTest/프로그래머스
[Lv.0] l로 만들기
김_수댕
2024. 12. 11. 13:52
반응형
2024.12.02 푼 문제
https://school.programmers.co.kr/learn/courses/30/lessons/181834
✅ 문제
알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.
제한 사항
- 1 ≤ myString ≤ 100,000
- myString은 알파벳 소문자로 이루어진 문자열입니다.
입출력 예
myString | result |
"abcdevwxyz" | "lllllvwxyz" |
"jjnnllkkmm" | "llnnllllmm" |
🔎 풀이 방법
I가 있는 곳의 인덱스 위치를 알아내서 그 앞을 자르고, 해당 부분 길이만큼 I를 앞에서 추가해준다.
저거 아님. 유니코드 상 소문자 L보다 앞에 있는 문자들을 l로 변환하는 것
정규식 안쓰고 풀어보기로 함
유니코드 상 l은 108번. a-h는 97-107까지.
문자열의 유니코드값을 찾는 함수 : chatCodeAt()
foreach 사용해서 풀어보고 싶었음…
아님 문자열로 해서 replaceAll 사용하거나…
💻 코드
const solution = (myString) => {
const myArr = myString.split("");
const newArr = [];
for(let i = 0; i < myArr.length; i++) {
(myArr[i].charCodeAt() > 96 && myArr[i].charCodeAt() < 108) ? newArr.push("l"):newArr.push(myArr[i])
}
return newArr.join("");
}
👀 추가 공부
문자 순서로 비교
function solution(myString) {
return [...myString].map((v) => v < 'l' ? 'l' : v).join('');
}
나랑 같은 풀이 but 문자 순서로 바교
function solution(myString) {
var answer = '';
for(let i = 0; i < myString.length; i++) {
if(myString[i] < "l") {
myString = myString.replace(myString[i], "l");
}
}
answer = myString
return answer;
}
나랑 같은 풀이 but map 사용
function solution(myString) {
let result = '';
let arr = myString.split("");
let unicodeArr = arr.map(v=>v.charCodeAt());
let unicodeL = "l".charCodeAt(); // 108
let smallThanLArr = unicodeArr.map(v=>v < 108 ? 108 : v);
result = smallThanLArr.map(v=>String.fromCharCode(v)).join("");
return result;
}
반응형