- 이상한 문자 만들기2025년 02월 10일
- redpome
- 작성자
- 2025.02.10.:51
https://school.programmers.co.kr/learn/courses/30/lessons/12930
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제에서는 단어 단위로 나뉘어진 문자열이 주어져서 나는 2번 쪼개기로 했다.
처음 주어진 문자열을 나누고 나눠진 문자의 인덱스를 다뤄 작성하는 것이다.function solution(s) { return s.split(' ').map((word) => { return word.split('').map((char, index) => { return index % 2 === 0 ? char.toUpperCase() : char; }).join(''); }).join(''); }
물론 return을 안 해줘서 undefined가 되는 문제가 있었다, 그런데 테스트 케이스는 통과하고 다른 문제는 몽땅 틀렸다.어쩌면 문자열 s를 나눌때 split(' ')으로 공백 1개가 들어간게 아니라 여러개일 경우가 케이스로 존재할 수 있다고해서 안 되는 경우를 나눠봤다.
- 공백이 여러 개가 있는 경우
- 문자가 아닐 때 split으로 나누는 경우
- s의 양끝에 공백이 존재하는 경우
근데 보통 이럴때는 정규식표현을 사용하는 경우가 많길래 다른 사람들은 어떤 풀이를 했나 봤더니 바로 정규표현식이 나왔다.
그리고 아래는 공백 구분 시 정규표현식을 사용한 코드이다.
function solution(s){ return s.split(/(\s)/).map((word)=>{ return word.split('').map((char,index)=>{ return index % 2 === 0 ? char.toUpperCase() : char.toLowerCase(); }).join(''); }).join(''); }
당연히 GPT 도움을 받았다. /(\s)/는 /으로 시작과 끝, \s를 통해 스페이스, 탭, 줄 바꿈 등의 공백 문자가 포함되는 것을 의미하고 그것을 기준으로 나누었다.차이점이 한 가지 더 있다면 삼항 연산자에서 char.toLowerCase()를 통해 false인 경우 소문자로의 변환을 명시적으로했다.
한 가지 더 안 되는 경우를 생각해보니, 원본이 되는 s에 처음부터 대소문자 여부가 문제에 적히지않았었다... 그러니까 대문자가 섞인 문자열이 주어졌을 수도 있었다.
위의 코드를 돌리면 다행히 통과된다.
정규표현식에서 공백처리 정도는 암기하는 것이 나을것 같다.
'프로그래머스' 카테고리의 다른 글
카드 뭉치 (0) 2025.03.07 최솟값 만들기 (그리디 알고리즘) (0) 2025.02.25 프로그래머스 - 과일 장수 (0) 2025.02.07 프로그래머스 - 소수 만들기 (2) 2025.01.14 프로그래머스-문자열 내 마음대로 정렬하기 (1) 2025.01.02 다음글이전글이전 글이 없습니다.댓글