코딩테스트 입문 Day 12 문자열, 정렬, 사칙연산, 수학


1. 모음 제거

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000

(1) 코드 작성

import re

def solution(my_string):
    return re.sub("[aeiou]", "", my_string)

(2) 코드 리뷰 및 회고

  • re 모듈을 사용하여 쉽게 특정 문자열을 제거했다.
  • 특정문자들을 제거할 때 [] 안에 넣으면 안에 포함되어있는 문자를 ““로 제거할 수 있다.
  • EASY 😎


2. 문자열 정렬하기 (1)

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
  • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.

(1) 코드 작성

import re

def solution(my_string):
    answer = map(int, re.sub("[^0-9]", "", my_string))
    return sorted(answer)

(2) 코드 리뷰 및 회고

  • re 모듈을 사용하여 쉽게 특정 문자열을 제거했다.
  • 특정문자들을 제거할 때 [] 안에 넣으면 안에 포함되어있는 문자를 ““로 제거할 수 있다.
  • 특히 [^문자열]을 사용하면 문자열에 해당하는 것이 아닌 것을 ““로 대체할 수 있다. 그리고 숫자만 남은 문자열을 map으로 int처리 했다.
  • 한 자료형에 대해 두 함수를 적용하고싶을 때 map을 사용하면 된다.
  • 마지막으로 sorted 함수를 적용하여 내림차순으로 정렬했다.
  • EASY 😎


3. 숨어있는 숫자의 덧셈 (1)

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

(1) 코드 작성

import re

def solution(my_string):
    answer = map(int, re.sub("[^0-9]", "", my_string))
    return sum(answer)

(2) 코드 리뷰 및 회고

  • re 모듈을 사용하여 쉽게 특정 문자열을 제거했다.
  • 특정문자들을 제거할 때 [] 안에 넣으면 안에 포함되어있는 문자를 ““로 제거할 수 있다.
  • 특히 [^문자열]을 사용하면 문자열에 해당하는 것이 아닌 것을 ““로 대체할 수 있다. 그리고 숫자만 남은 문자열을 map으로 int처리 했다.
  • 한 자료형에 대해 두 함수를 적용하고싶을 때 map을 사용하면 된다.
  • 마지막으로 sum 함수를 적용하여 리스트 내에 있는 숫자 요소들의 합을 구했다.
  • EASY 😎


4. 소인수분해

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 2 ≤ n ≤ 10,000

(1) 코드 작성

def solution(n):
    """
    12 = 2*2*3 => 2가 두번 들어갈 수 있음
    특정 숫자에 대해 2회 이상 
    """
    answer = []
    num = n
    for i in range(2, n+1):
        for j in range(num//i):
            if num % i == 0:
                answer.append(i)
                num = int(num / i)
    # sorted 함수 사용안하면 특정 테스트에서 오답 뜬다.
    # 오답 : 테스트 6, 8, 12, 24
    return sorted(list(set(answer)))

(2) 코드 리뷰 및 회고

  • 소수들의 곱을 표현하기 위해 고민을 많이 했었다.
  • 고민한 부분은 range()만큼 반복문을 돌려도 1부터 2 ~.. 순으로 한 숫자가 반복되지 않는 다는점이었다.
    • 12(223)의 소인수는 2, 3이다.
  • 예시 적용
    • n = 8
    • for i in range(2, 9) > [2, 3, 4, 5, 6, 7, 8]
    • i가 2일 때, for j in range(4) > [0, 1, 2, 3]만큼 반복
      • 8%2 == 0 -> answer에 2추가, num에 8을 2로 나눈 값을 할당
      • 4%2 == 0 -> answer에 2추가, num에 4를 2로 나눈 값을 할당
      • 2%2 == 0 -> answer에 2추가, num에 2를 2로 나눈 값을 할당
      • 1%2 != 0 (조건문 만족 X)
  • num이 2보다 작으면 break 걸어주면 더 좋을 것 같다!
  • EASY 😎


👩🏻‍💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.

댓글남기기