본문 바로가기
소프트웨어 개발/자료구조 & 알고리즘

String 알고리즘 문제 with JavaScript

by cozyzoey 2020. 12. 21.
function vowels(str) {
	let counter = 0

	for (const char of str.toLowerCase()) {
		if ('aeiou'.includes(char)) counter++
	}

	return counter
}

거꾸로 뒤집기

스트링을 거꾸로 출력하기 ("apple" → "elppa")

#1 reverse()

function reverse(str) {
  return str.split('').reverse().join('')
}

#2 for-of loop

function reverse(str) {
  let reversed = ''
  for (const char of str) {
    reversed = char + reversed
  }

  return reversed
}

#3 reduce()

function reverse(str) {
  return str.split('').reduce((reversed, char) => char + reversed, '')
}

 

Palindrome 체크

거꾸로 읽어도 똑같은 단어인지 체크하여 true/false로 반환하기 ("abba" returns true)

#1 reverse()

원래 str이 뒤집은 str과 동일한가?

function palindrom(str) {
  return str === str.split('').reverse().join('')
}

#2 every()

첫번째 문자 - 뒤에서 첫번째 문자, 두번째 문자 - 뒤에서 두번째 문자 ... 차례로 비교

function palindrome(str) {
  return str.split('').every((char, i) => {
    return char === str[str.length - 1 - i]
  })
}

 

Int 뒤집기

입력된 integer를 거꾸로 뒤집은 integer를 반환 (ex 15 => 51)

function reverseInt(n) {
  const reversed = n.toString().split('').reverse().join('')
  return parseInt(reversed) * Math.sign(n)
}

 

 

가장 많이 나온 문자 찾기

예를 들어 "abbbbbc"가 입력된 경우 가장 많이 나온 문자인 b를 반환하기

# Char Map {문자: 나온 횟수}

function maxChar(str) {
  const chars = {}
  let max = 0
  let maxKey = ''

  for (const char of str) {
    chars[char] = chars[char] + 1 || 1
  }

  for (const key in chars) {
    if (chars[key] > max) {
      max = chars[key]
      maxKey = key
    }
  }

  return maxKey
}

 

Anagrams 체크

두개 단어가 문자열 조합이 동일한지 체크하여 true/false로 반환 (ex dormitory,  dirtyroom → return true)

# sort()

문자가 아닌 것을 찾아 없애고 소문자로 통일

function anagrams(stringA, stringB) {
  return sortString(stringA) === sortString(stringB)
}

function sortString(str) {
  return str.replace(/[^\w]/g, '').toLowerCase().split('').sort().join('')
}

 

문장 대문자로 바꾸기

입력된 문장에서 가장 첫 문자와 공백 뒤의 문자를 대문자로 바꾸기

#1 slice()

function capitalize(str) {
  let words = []
  
  for (word of str.split(' ')) {
  	words.push(word.slice(0, 1).toUpperCase() + word.slice(1))
  }
  
  return words.join(' ')
}

#2 for loop

function capitalize(str) {
  let result = str[0].toUpperCase()
  
  for (let i = 1; i < str.length; i++) {
	if (str[i - 1] === ' ') {
	  result += str[i].toUpperCase()
		} else {
          result += str[i]
		}
	}
    
  return result
}

 

모음 찾기

a, e, i, o, u 갯수 반환하기

#1 includes - my solution (참고로 includes는 array도 가능)

function vowels(str) {
	let counter = 0

	for (const char of str.toLowerCase()) {
		if ('aeiou'.includes(char)) counter++
	}

	return counter
}

#2 regex

function vowels(str) {
	//match 결과가 없으면 null을 반환
	const matches = str.match(/[aeiou]/gi)
	return matches ? matches.length : 0
}

 

댓글