[ 문제 ]
문제를 해석해보면, 연속된 홀수 사이에 '-'를 추가한 문자열을 반환하는 것이다.
이 문제의 특이점은 '문자열' 형태의 숫자를 입력받는다는것과, 문자열 형태의 값을 반환해야 한다는 것!
[ 풀이 ]
나의 로직은 간단하다.
반복문을 이용하여 해당 인덱스의 값과 전 인덱스의 값이 홀수이면 사이에 '-'를 추가해주는 것!
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 |