😎문제
- sliceCityFromAddress 함수는 address를 인자로 받습니다.
- address는 주소를 나타내는 string 입니다.
- 주어진 주소에서 도시를 찾아 삭제하고 새로운 주소를 반환해 주세요.
- 이 때, 도시는 무조건 "시"라는 단어로 끝납니다. 예) "서울특별시", "성남시"
- "시"는 주소에 단 한번만 포함되어 있습니다.
- 예시) 경기도 성남시 분당구 중앙공원로 53 → 경기도 분당구 중앙공원로 53
😏내 생각
- 인자로 받은 주소에서 "시"를 기준으로 도시이름을 구한다.(서울특별시 등등)
- 띄어쓰기 기준으로 배열 만들기(['서울시', '강남구' , '~~'] 이런 느낌)
- 1번에서 구한 도시이름의 인덱스를 구해 해당 요소를 삭제한다.
- 나머지 요소를 빈칸 기준으로 문자열로 다시 합친다.
사용한 함수
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);
let city = address.slice(sliceEndPoint+1,sliceStartPoint+1);
const addressArr = address.split(" ");
addressArr.splice(addressArr.indexOf(city), 1);
address = addressArr.join(" ");
return address;
}
이 문제 해결하는데 하루종일 걸렸다..
더 좋은 방법을 알아내면 나중에 다시 풀어봐야겠다!