[TIL-15] String 문제 풀이

da.circle·2022년 10월 2일
0

TIL

목록 보기
15/44

😎문제

  • sliceCityFromAddress 함수는 address를 인자로 받습니다.
  • address는 주소를 나타내는 string 입니다.
  • 주어진 주소에서 도시를 찾아 삭제하고 새로운 주소를 반환해 주세요.
  • 이 때, 도시는 무조건 "시"라는 단어로 끝납니다. 예) "서울특별시", "성남시"
  • "시"는 주소에 단 한번만 포함되어 있습니다.
  • 예시) 경기도 성남시 분당구 중앙공원로 53 → 경기도 분당구 중앙공원로 53

😏내 생각

  1. 인자로 받은 주소에서 "시"를 기준으로 도시이름을 구한다.(서울특별시 등등)
  2. 띄어쓰기 기준으로 배열 만들기(['서울시', '강남구' , '~~'] 이런 느낌)
  3. 1번에서 구한 도시이름의 인덱스를 구해 해당 요소를 삭제한다.
  4. 나머지 요소를 빈칸 기준으로 문자열로 다시 합친다.

사용한 함수

lastIndexOf(검색할 값, 시작위치)

  • 뒤에서부터 값을 찾는다.
  • 시작위치는 생략 가능하다. 생략하면 맨 뒤부터 값을 찾는다.
  • 일치하는 결과값이 없으면 -1을 리턴한다.
  • 처음에는 lastIndexOf대신 indexOf를 사용했지만, "시"에서 시작해서 앞으로 오면서 빈칸을 찾아야 해서 lastIndexOf 함수를 사용했다.

slice(시작위치, 끝 위치)

  • 시작 위치에서 끝 위치까지의 값들을 배열로 만들어 반환한다.
  • 원본 배열은 변경되지 않는다.
  • String에서 사용할 수 있다.
  • 끝 위치는 생략할 수 있다. 생략하면 시작위치부터 맨 끝까지 잘라낸다.

split(구분자, 최대 분할 갯수)

  • 문자열을 자를 구분자를 지정한다. " " 를 넣으면 띄어쓰기를 기준으로 각 문자열이 배열에 들어간다.
  • 최대 분할 갯수는 생략 가능하다.

splice(시작값, 삭제할 갯수, 추가할 요소1, 2, 3, ...)

  • 원본 배열의 요소를 추가하거나 삭제할 수 있다.
  • slice와 다르게 원본 배열이 바뀐다.
  • 삭제할 갯수를 생략하면 시작값부터 뒤에 있는 모든 요소를 제거한다.
  • 삭제할 갯수가 0 이하라면 어떤 요소도 제거하지 않는다.
  • 추가할 요소를 생략하면 요소 제거만 한다.
  • mdn - splice
  • 인덱스 번호를 사용해서 배열의 요소를 삭제하기 위해 사용했다.

indexOf(검색할 값, 시작위치)

  • 앞에서부터 값을 찾는다.
  • 시작위치는 생략 가능하다. 생략하면 맨 앞부터 값을 찾는다.
  • 일치하는 결과값이 없으면 -1을 리턴한다.
  • 여기는 구한 도시 이름과 일치하기만 하면 되므로 indexOf를 사용하였다. lastIndexOf를 사용할 필요가 굳이 없다고 생각했다.

join(구분자)

  • 구분자를 기준으로 배열의 모든 요소를 연결해서 하나의 문자열로 만든다.
  • 여기서는 띄어쓰기를 기준으로 하나의 문자열로 만들었다.

🤯최종 코드

function sliceCityFromAddress(address) {
  // 도시 이름을 찾을 기준 문자열
  const slicePointStr = "시";
  
  //"시"부터 시작해서
  let sliceStartPoint = address.lastIndexOf(slicePointStr);
  //빈칸을 만날 때 까지의 인덱스 구하기 
  let sliceEndPoint = address.lastIndexOf(" ", sliceStartPoint);

  //address에서 "시"부터 시작해 빈칸까지 slice
  //빈칸을 포함하지 않고 도시 이름만 구하기 위해 시작지점과 끝지점에 1을 더하기
  let city = address.slice(sliceEndPoint+1,sliceStartPoint+1);

  //split함수로 띄어쓰기 기준 배열로 만들기
  const addressArr = address.split(" ");

  //위에서 구한 city의 인덱스를 구해 해당 요소 삭제하기
  addressArr.splice(addressArr.indexOf(city), 1);

  //나머지 요소를 빈칸 기준으로 문자열로 합치기
  address = addressArr.join(" ");

  //return!
  return address;
}

이 문제 해결하는데 하루종일 걸렸다..
더 좋은 방법을 알아내면 나중에 다시 풀어봐야겠다!

profile
프론트엔드 개발자를 꿈꾸는 사람( •̀ ω •́ )✧

0개의 댓글