티스토리 뷰

주어지는 string을 띄어쓰기로 split한 후, 단순히 뒤집는 작업 전에, 태그를 인식해서 거기서는 뒤집는 작업이 일어나지 않게 해야한다.

1. tag 찾기

indexOf 메서드를 사용한다. 그렇지만, 한 단어에 tag가 여러개 나올 수도 있는 데 반해 indexOf는 단 하나만을 반환한다.

따라서 단순히 쓰기보단 두번째 parameter를 이용해야 한다. 

이렇게 하는데... 이상하게 태그 분리가 안되는 문제가 계속 발생한다.

근데 애초에 문제는...'주어지는 string을 띄어쓰기로 split한 후' 이게 문제였다. 태그 안 띄어쓰기까지 맨 처음에 분리해버린거였음... 아오!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 이거때문에 1시간을...

즉, 애초에 split부터 틀어진 것이었다...

split() 관련 MDN 문서를 찾아보다 발견한 것.

이런게 있었던가...????

 

https://hamait.tistory.com/342 여기 블로그를 통해 파악했다.

즉 내가 대충 짤 정규표현식은...

/(꺽쇠와 내부의 알파벳소문자와 띄어쓰기|알파벳소문자or숫자인 모든것)/g 인것이다.

꺽쇠는 <>로, 내부 문자와 띄어쓰기는 [/w ]로 가능하다.

근데, /w는 알파벳, 숫자, _를 포함하기떄문에 엄밀히 말하면 틀리다. 정확하게 문제에서는 '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 라고 했다. 

따라서 [a-z ]가 더 정확하겠음! 저렇게만 쓰면 단일문자이기때문에 +를 뒤에 붙여서 반복된다는 표현까지 해준다.

<[a-z ]+> 가 앞의 식이 되겠다.

꺽쇠 내부를 잘 나누고 있다!

이젠 알파벳소문자or숫자인 모든 것이다. 범위이기때문에 [ ] 안에 a-z와 0-9를 넣는다.

[a-z0-9]에다가 여러문자이기 때문에 +를 붙여서 완성한다.

훌륭하게 구분한다! 이제 실제로 코드에 넣어봤다.

의도대로 잘 작동한다!

생각해보니, 단어 간 띄어쓰기도 저장할 필요가 있었다. 그래서 정규표현식을 다시 한 번 수정했다. 

띄어쓰기를 포함해서 모두 구분하고있다. 이젠 정말 쉬운 일만 남았다.

그저 문자 맨 앞을 검사해서 문자라면 뒤집고, 아니라면 그냥 join해주면 되는 것이다.

문자 검사는 앞에서 배운 정규표현식을 또 활용하면 된다.

const fs = require("fs");

const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let inputChartext = fs.readFileSync(filePath).toString();
solution(inputChartext);

function solution(inputText) {
  const seperator = /(<[a-z ]+>|[a-z0-9]+|\s)/g;
  const isChar = /[a-z0-9]/;
  let stringArray = inputText.match(seperator);
  for (index in stringArray) {
    if (isChar.test(stringArray[index].charAt(0))) {
      stringArray[index] = stringArray[index].split("").reverse().join("");
    }
  }
  console.log(stringArray.join(""));
}

배운것 : 정규표현식

정규표현식을 익히고 실제로 써봤다는 점에서 정말 뿌듯했다.

사용이 정말 편하기도 해서 자주 써버릇해보려한다.

'■ 알고리즘 > ◻ 백준' 카테고리의 다른 글

[C++] 1193번: 분수찾기  (0) 2022.10.23
[Python]10799번: 쇠막대기  (0) 2022.08.12
[Nodejs]10866번: 덱  (0) 2022.08.03
[Nodejs]1158번: 요세푸스 문제  (0) 2022.08.03
[Nodejs]10845번: 큐  (0) 2022.08.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함