[Code Kata] Week 01-03, 04

AM_I_TRASH·2022년 7월 10일

code-kata

목록 보기
2/6

숫자배열과 목표 정수값을 인자로 받았을 때, 배열 속 중복되지 않은 두 정수를 더해 '목표 정수값'이 나오게 하는 배열의 index를 return해 주세요.
예를 들어,
nums: [4, 9, 11, 14], target: 13 일 때
return값은 [0, 1]이 되어야 합니다.
String 값을 인자로 받았을 때, 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str = "abcabcabc"일 때, return: 3 => // 'abc'
str = "aaaaa"일 때, return: 1 => // 'a'
str = "sttrg"일 때, return: 3 => // 'trg'

const getLengthOfStr = str => {
  let maxCnt = 0
  let tempCnt = 0
  
  for (var j = 0; j < str.length; j++) {
    let strArr = []
    for (i = j; i < str.length; i++) {
      if (strArr.indexOf(str[i]) == -1) {
        strArr.push(str[i])
      } else {
        strArr = []
        strArr.push(str[i])
      }
      tempCnt = strArr.length
      if (maxCnt < tempCnt) {
        maxCnt = tempCnt
      }
    }
  }
  return maxCnt
}

오. 이 친구는 예외사항이 아주 많아 매우매우매우매우 귀찮았다.

maxCnt는 return할 최종 값이 저장될 변수, tempCnt는 maxCnt와 비교할 변수.
strArr는 str의 글자 하나하나를 분해해 넣어볼 그릇이다.

2중 for문 중, 내부 for문 먼저 알아보자.

strArr에 str[i]가 없을 경우, str[i]를 삽입한다.
maxCnt와의 비교를 위해 strArr의 길이를 tempCnt에 저장한 후
if문을 통해 우위를 가리고 승자가 maxCnt가 된다.

strArr에 str[i]가 있을 경우, strArr를 초기화 한 후 str[i]를 삽입한다.
maxCnt와의 비교를 위해 strArr의 길이를 tempCnt에 저장한 후
if문을 통해 우위를 가리고 승자가 maxCnt가 된다.

str의 길이 만큼 반복한다.

그 후, 내부 for문이 종료되고 외부 for문이 돌아가는데

strArr를 초기화한 후, index를 한자리 뒤로 땡겨서 다시 탐색한다.
이후 내부 for문 실행.

strArr를 내부for문 밖에서 초기화해주는 이유는,
내부 for문이 끝날 때, '가장 긴, 중복되지 않은 문자열'이 str의 최후열에 있을 경우 미처 초기화되지 못한 strArr를 위해서이다.
이 과정을 통해, 전체 탐색을 해줌으로써 길이가 '가장 긴, 중복되지 않은 문자열'이 문자열 어디에서부터 시작되든 찾아낼 수 있게 된다.
이 과정이 필요한 이유는 'atbctefgth'를 str로서 사용해보면 알게 된다.


정수값을 인자로 받았을 때, 해당 인자의 회문(palindrome) 여부를 boolean 값을 통해 반환해주세요.
num: 123일 때, return: false => 뒤집은 모양이 321 이기 때문
num: 1221일 때, return: true => 뒤집은 모양이 1221 이기 때문
num: -121일 때, return: false => 뒤집은 모양이 121- 이기 때문
num: 10일 때, return: false => 뒤집은 모양이 01 이기 때문

const sameReverse = num => {
  return num.toString() == num.toString().split("").reverse().join("")
}

예전에 사용했던 꼼수 문법과 굉장히 유사하다.
솔직히 좀 날먹이었달까(쑻)

profile
짝퉁 프로그래머

0개의 댓글