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

문자열에서 특정 문자를 대문자로 변환하기

by 금화맘 2023. 7. 13.

오늘도 프로그래머스를 통해 알고리즘 문제를 풀었다.

my_string인 문자열이 있고,

alp 라는 한단어로 된 문자열이 있다.

my_string에서 alp라는 걸 찾아서 있으면 my_string에서 alp를 대문자로 바꾼 문자열을 반환하는 거였다.

 

나는 이 문제를 풀때 reduce 이게 join 없이도 한방에 되니까 코드가 직관적이게 되서 사용하기 편할거 같다 생각되서 사용했다. reduce로 했을때 문제를 잘 풀었고 테스트하기에선 너무 잘 돌아갔다.(면 너무 좋지만 솔직히 조금 삽질을 했다)

3. var answer = [...my_string].reduce((a,c)=> (c === alp)? c.toUpperCase() : a+c,'');

근데 이 코드로 채점하기를 했을 때 합격하지 않아서 너무 당황했다.

 var answer = [...my_string].reduce((a,c)=> (c === alp) ? a+c.toUpperCase() : a+c,[]);

내가 합격한? 통과한? 코드이다. 이 전까지 계속 코드를 a+c로 했는데 유일하게 저때만 곧장 c+toUppeCase()로 했었다. 그래서 혹시나 하고 넣어 보니 짜잔. 통과! 오늘도 reduce에 한발짝 다가선거 같아서 너무 좋다.

 

통과하기 까지 작성한 코드

1. var answer = [...my_string].reduce((a,c)=> !(c==alp)? a+c.upperCase():a);
2. var answer = [...my_string].reduce((a,c)=> (c==alp)? a+c.toUpperCase() : a+c);

통고를 하기 까지 꼭 뭔가 하나씩은 없었다. 이번에 코드를 틀리면 두고 새로운걸 추가하는 코드를 밑에 계속 적어 내려갔더니 내 단점을 알 수 있었다.

잘 가다가 갑자기 u턴? 이라 해야하나? 내가 작성한 코드가 잘 돌아간다는 확신이 없어서 잘 돌아가던걸 뒤돌아서 빼고 오는 버릇이 있었다.

여기서도 첫번째 코드에선 a+c.to~:a 였고, 2번째 코드에선 a+c.to~:a+c였다. 그러면 여기서 a+c.tou~: a+c, []를 해야하는데 왜 a+를 갑자기 뺀걸까... 그래도 a+가 빠진게 오류인걸 알아채서 너무 좋았다. 스스로 해낸 기분! 물론 다른 선배님들의 블로그를 보고 따라간 거지만 답을 본게 아니니깐!

 

그리고 이후에 다르게 푼 사람들의 코드도 볼 수 있었다.

그 중 너무 내 편견? 잘못된 지식을 바로 잡을 기회를 준 블로그가 있어서 너무 감사했다.

 

reg를 사용해서 하는 걸 생각했는데 변수를 받아오지 못하는 걸로 생각했는데 reg도 변수를 받을 수 있었다.

이분의 블로그를 통해 알 수 있어서 내 편견을 깨주셔서 너무 감사했다.

https://hihiha2.tistory.com/113

 

프로그래머스 특정한 문자를 대문자로 바꾸기 JS (정규식 생성자와 replace(), replaceAll() )

문제 설명 영소문자로 이루어진 문자열 my_string과 영소문자 1글자로 이루어진 문자열 alp가 매개변수로 주어질 때, my_string에서 alp에 해당하는 모든 글자를 대문자로 바꾼 문자열을 return 하는 solut

hihiha2.tistory.com

그리고 너무 간단하게 푸신 분도 계셨다.

const solution=(s,a)=>s.replaceAll(a,a.toUpperCase())

s가 my_string인거고 a가 alp인듯한데. 저렇게 곧장 replaceAll을 사용하니 join을 쓸 필요도 없이 곧장 문자열이 반환됐다. 굳이 reduce나 map을 쓰겠다고 할 필요 없이 매서드를 제대로 활용 할 수 있다면 코드의 품질이 더 좋아지는 것을 알 수 있었다.