개발 공부/알고리즘

[항해 99 알고리즘 테스트] "1번. 전화번호 양식" JavaScript / .slice()

U_D 2022. 3. 17. 20:07

 

1. 문제 설명

CS 스터디 팀장이 된 지용이는 팀원들의 연락처를 수집하여 정리하는 도중 문제 하나를 발견했다.
지용이는 팀원들에게 전화번호를 ‘010-1234-4567’ 양식으로 제출하기를 부탁했지만 ‘01012345678’과 같이 ‘-’ 구분 없이 붙여서 제출한 사람들의 전화번호가 엑셀에서 앞에 0이 사라진 ‘1012345678’로 보이는 것이다.
지용이는 ‘1012345678’로 저장된 전화번호를 다시 ‘010-1234-5678’ 형식으로 바꾸려고 한다.
지용이를 도와줄 수 있는 알고리즘을 만들어 보자

 

 

2. 제한 조건

phone은 length는 10으로 고정됩니다.

 

 

 

3. 예시

입력/출력

 

 

4. 풀이

[slice 활용]

  1. 앞자리에 문자열 0을 더해주고
  2. 들어오는 문자열 번호에서 slice를 통해 0번째부터 2번째 내까지 가져오고
  3. 문자열 하이픈 더하기
  4. 그다음도 같은 원리로 반복했다.
  5. 숫자로 된 문자열은 index값을 사용할 수 있어서 바로 진행했다.
function solution(phone){
	let result="";
  	return result = "0" + phone.slice(0,2) + "-" + phone.slice(2,6) + "-" + phone.slice(6) 
}
console.log(solution("1062509911"))
console.log(solution("1012345678"))
console.log(solution("1032501800"))

 

[팀원 분의 풀이]

function solution(phone){
	let result=""
  phone = phone.match(/\d/g)  //[1,0,6,2,5,0,9,9,1,1]
  phone.unshift('0')          //[0,1,0,6,2,5,0,9,9,1,1]
  phone.splice(7, 0, '-')     //[0,1,0,6,2,5,0,-,9,9,1,1]
  phone.splice(3, 0, '-')     //[0,1,0,-,6,2,5,0,-,9,9,1,1]
  result = phone.join('')     //[010-6250-9911]
	return result;
}
console.log(solution("1062509911"))

 

 

[다양한 풀이들]

function solution(phone){ //핸드폰 번호 가리기 참고
  let result=""
  let num=""
  for (let i = 0; i < 10; i++)
    if (i < 1) { //0번째 자리에는 01 추가
      num += "01"
    } else { //뒤에서 아홉번째 자리부터는 주어진 숫자 그대로
      num += phone[i]
    };console.log(num, typeof(num))
     if(num.length===11){
       result += num.substr(0,3); //인덱스0에서부터 길이가3 010
       result += "-";
       result += num.substr(3,4); //인덱스3에서부터 길이가4 6250
       result += "-";
       result += num.substr(7); //인덱스7부터 마지막까지 9911
     }
	return result;
}
console.log(solution("1062509911"))
function solution(phone) {
  let result = ""
  var temp = ""

  temp = "0" + phone
  
  result = `${temp.slice(0,3)}-${temp.slice(3,7)}-${temp.slice(7,11)}`

  return result;
}
console.log(solution("1062509911"))