문제 풀이 : sliceCityFromAddress

강지원·2021년 10월 10일
0
post-thumbnail

sliceCityFromAddress 함수 구현

  • sliceCityFromAddress 함수는 address 를 인자로 받습니다.

  • address 는 주소를 나타내는 string 입니다.

  • 주어진 주소가 어느 도시 인지를 찾아 해당 주소에서 도시 부분만 삭제한 새로운 주소를 리턴해 주세요.

  • 도시는 무조건 "시" 로 끝납니다. 예를 들어, "서울시".
    "도" 와 "시" 는 주소에 한번 밖에 포함되어 있지 않습니다.
    예를 들어, 다음과 같은 주소가 주어졌다면;

    "경기도 성남시 분당구 중앙공원로 53"

    다음과 같은 값이 리턴되어야 합니다

    "경기도 분당구 중앙공원로 53"

1 .최종 코드

function sliceCityFromAddress(address) {
 let state = address.indexOf('도');
 let city = address.indexOf('시');
 // console.log(state, city); 
 
  if(state !== -1) {
 return address.slice(0,state+2) + address.slice(state+6, state.length);
} else if(city !== -1){
 return address.slice(6,city+5) + address.slice(9, city.length);
}
return address;
}
}
let address = "경기도 성남시 분당구 중앙공원로 53";
// let address = "서울특별시 강남구 테헤란로 427 위워크타워";
console.log(sliceCityFromAddress(address));

2. 풀이 과정

  1. 주소로 이뤄진 인자의 해당 단어를 찾는 거니까 indexOf를 사용해
    이 녀석들이 있는지 수색해봤다. 찾으면 1을, 못 찾으면 -1을 준다.
    이걸로 조건문을 돌려줘도 되겠다.

    let city = address.indexOf('시');
    let state = address.indexOf('도');

  1. 문장에 '도'나 '시'가 한 개 씩만 들었다고 하니
    위에서 사용한 indexOf값을 이용해 if문과 콜라보해주면 좋겠다.
    if의 안에 왜 (변수 !==1)을 사용해줬냐 하면,
    함수의 인자에 어떤 주소가 들어오느냐에 따라 indexOf가
    반환하는 값이 다르므로 못 찾았을 때 나오는 값인 -1을 사용해줬다.
    (실제로 난 멍청하게 계속 1 쓰다가 왜 안돼지 이랬다. 실화임)

if(state !== -1)

  1. 주어진 조건에 맞다면 해당 문장에서 ~시 부분만 지우고
    새로운 문장을 반환해줘야 하니 slice나 splice를 써주면 되겠다.
    그런데 splice는 기존의 데이터에 영향을 줄 수도 있겠다 싶어
    slice를 사용해줬다.

if(state !== -1) {
return address.slice(0,state + 2) + address.slice(state + 6, state.length);
}

  • ( 주소 예시를 '전라북도 군산시 나운동 은파유원지 근처 apt'
    라고 했을 때, '도'가 위치한 index가 3. '시'가 위치한 index가 7.
    그대로 이용해줬다. )
  1. 지금까지의 조건을 합쳐줬다
function sliceCityFromAddress(address) {
let city = address.indexOf('시');
let state = address.indexOf('도');

if(state !== -1) {
return address.slice(0,state + 2) + address.slice(state + 6, state.length);
}
return address;
}
sliceCityFromAddress('전라북도 군산시 나운동 은파유원지 근처 apt');

// '전라북도 나운동 은파유원지 근처 apt' 라고 잘 나온다.

여기까진 정답이다. 그런데 내가 간과한 사실이 하나 있었다.
바로 서울 특별시 처럼 앞에 '도'가 없는 지역도 있었던 것이다.
레플릿 테스트 결과에 계속 적색 불이 들어와서 킹받던 가운데 깨달아버렸다.

이 맛에 개발하는 거 아니겠나.
다시 조건을 추가해줘봤다.

  1. 이번엔 city라는 변수를 이용해서 조건을 추가해줬다.
    위에서 if를 써줬으니 여긴 else if로 조건을 주면 되겠네.
// '서울특별시 영등포구 타임스퀘어 근처 오피스텔'로 주소를 준다면
'시'에 해당하는 index는 4. 이용해주자.

(TMI. 대부분 앞이 '시'로 시작하면 서울특별시, 인천광역시,
광주광역시 이렇게 5글자다.)

else if(city !== -1) {
return address.slice(6, city + 6) + address.slice(city + 6, city.length);
// 영등포구 타임스퀘어 근처 오피스텔 결과가 잘 나온다.

6. 다시 합체
function sliceCityFromAddress(address) {
let city = address.indexOf('시');
let state = address.indexOf('도');

if(state !== -1) {
return address.slice(0,state + 2) + address.slice(state + 6, state.length);
} else if(city !== -1) {
return address.slice(6, city + 6) + address.slice(city + 6, city.length);
return address;
}

//sliceCityFromAddress('전라북도 군산시 나운동 은파유원지 근처 apt');

//sliceCityFromAddress('서울특별시 영등포구 타임스퀘어 근처 오피스텔');

3. 마치며

추가적인 조건을 알아차리지 못했고, 문장 index를 활용해 값을 변경하는 데에
어려움을 겪어서 많은 시간을 소모했다.

역시, 항상 그렇지만 끝없는 digging만이 살 길이다.

profile
'Why' better than 'Yes'

0개의 댓글

관련 채용 정보