본문 바로가기
자기개발/TIL

l로만들기 js

by 금화맘 2023. 7. 24.

프로그래머스에서 l로 만들기를 풀었다.

문자열이 주어지면 "l"보다 앞선 글자들은 모두 "l"로 반환하고 이보다 이후의 글자들은 그냥 반환하는 거였다.

아스키코드를 사용해서 l 까지 설정해서 거기보다 작은 거를 "l"로 반환하는 코드를 짜려고 아스키 코드 표를 찾았으나 l의 숫자만 아는게 아니라 a 부터 l 까지의 숫자를 알아야 한다는 번거로움이 존재했다.

 

그래서 reg를 통한 정규식을 활용하기로 변경했다.

a-l로 범위를 설정한 다음에 제대로 작동하는지 확인하고 싶어서 

myString.match(/[a-l]+/gi) 를 사용했는데 이게 ["abcd"] 이렇게 반환했다.

match를 다르게 활용하는 방법이 있는 거 같았는데 잘 기억이 나지 않아서 replace를 사용하기로 했다.

 

myString.replace(/[a-l]+/gi,'l'); 를 사용하니 "lvwxyz"이 나왔다 기댓값은 "lllllvwxyz"였다. 그래서 뭐가 문제일까 하다가 replaceAll을 사용해봤다. 

var answer = myString.replaceAll(/[a-l]+/gi,'l'); 로 해도 결과는 "lvwxyz"이 나왔다. 그렇다면 문제는 괄호안에 들어있는 식이 문제라는 생각이 들어서 +를 제거하고 

var answer = myString.replaceAll(/[a-l]/gi,'l');

로 사용했더니 통과가 됐다.

replaceAll은 이미 해당하는 모든 걸 l로 변환한다는 거였는데 gi를 사용하는건 너무 오버기술? 인거 같아서 

var answer = myString.replace(/[a-l+]/gi,'l');

로 해서 통과를 받았다.

역시 +의 위치가 문제였던 겨였다.

 

다른 사람들의 풀이도 궁금해져서 확인해 봤다.

[...myString].map((v) => v < 'l' ? 'l' : v).join('');

문자 자체로 비교할 수 있는 코드가 있서 이건 정말 효용성이 높다고 생각됐다. map과 join을 이용하면 코드가 길어질 거라 생각했는데 오히려 짧고 이해도 잘 되서 이걸 생각한 사람과 커피책을 해보고 싶다는 생각이 들었다. 어떻게 하면 이렇게 좋은 코드를 작성하실 수 있죠??라고 물어보고 싶어서..ㅎ

 

그리고 아스키코드를 활용한 코드를 사용한 사람들의 코드를 봤는데 한번에 이해하기 어려운걸 보고 아스키코드 활용을 좀더 공부해 보기로 했다.

 

 

'자기개발 > TIL' 카테고리의 다른 글

o떼기 js  (1) 2023.07.27
홀수 vs 짝수 js  (0) 2023.07.25
프로그래머스 js 배열비교하기  (0) 2023.07.22
공백으로 구분하기2 js로 풀기  (0) 2023.07.21
A강조하기에는 a도 A도 A가 나와야 한다  (0) 2023.07.20