본문 바로가기

자료구조알고리즘/코드스테이츠 Coplit

10_insertDash

[ 문제 ]

문제를 해석해보면, 연속된 홀수 사이에 '-'를 추가한 문자열을 반환하는 것이다.

이 문제의 특이점은 '문자열' 형태의 숫자를 입력받는다는것과, 문자열 형태의 값을 반환해야 한다는 것!

 

[ 풀이 ]

나의 로직은 간단하다.

반복문을 이용하여 해당 인덱스의 값과 전 인덱스의 값이 홀수이면 사이에 '-'를 추가해주는 것!

function insertDash(str) {
  let result = str[0]; //먼저 변수 result를 선언하고, [0]인덱스의 값을 넣어준다. 문자열 타입이다.
  for(let i = 1; i < str.length; i++){ //반복문을 이용하여
    if(str[i-1] % 2 === 1 && str[i] % 2 === 1){ //전 인덱스의 값과 현재 인덱스의 값이 홀수일 경우
      result = result  + '-'+ str[i] //기존 result값에 '-'를 추가한 뒤, 현재 인덱스의 값을 추가한다.
    } else { //만약 전 인덱스,현 인덱스 값 중 하나라도 짝수일 경우에는 
      result = result + str[i] //기존 result값에 현 인덱스 값을 추가한다.
    }
  }
  return result; //result값을 반환한다.
}

 

여기서 눈여겨봐야할 점은, 

1/ str[i] % 2 즉, 문자열 형태의 숫자 % 2를 계산하는 경우,

str[i]가 아무리 숫자라 할지라도 문자열 형태인데 % 2, 즉 2로 나누어 질 수 있는걸까?

정답은 Yes. 

정말 신기하게도 가능하다. 

"4" % 2; // 0 -- 4가 짝수이므로 2로 나누었을때 나머지가 0.
"3" % 2; // 1 -- 3이 홀수이므로 2로 나누었을때 나머지가 1.

 

2/ 문자열 형태의 숫자끼리의 덧셈은 덧셈이 아닌, 문자열을 이어붙이는 기능을 한다.

'3'+'2' ;// 5가 아닌 '32'

 

[ 레퍼런스 ]

 레퍼런스의 로직도 나와 비슷한 것 같다.

단지,

1/ Number 함수를 사용하여 확실하게 숫자 타입으로 변경해둔것

2/ 나처럼 (str[i-1] % 2 === 1 && str[i] % 2 === 1) 이렇게 적지 않고, === 1을 생략한 것.

(그래도 1은 truthy값이니 가능하다!)

3/ 그리고 else를 사용하여 result = result + str[i] 를 두번 적지 않고

if문 종료 후, 무조건 result = result + str[i]를 하게 만드는 것.

 

역시 레퍼런스는 공부가 많이 된다!

'자료구조알고리즘 > 코드스테이츠 Coplit' 카테고리의 다른 글

14_superIncreasing  (0) 2022.02.22
11_removeExtremes  (0) 2022.02.18
09_ABCheck  (0) 2022.02.16
08_convertDoubleSpaceToSingle  (0) 2022.02.15
07_convertListToObject  (0) 2022.02.12