🔥 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;
}
반응형