[Python] 구현 및 시뮬레이션 알고리즘을 파헤쳐 보자! (문자열 재정렬)

2022. 1. 28. 17:07·Python 알고리즘
반응형

문제

  • 알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이 때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
  • ㅇ를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.

입력

K1KA5CB7

출력

ABCKK13

내가 제출한 풀이 - 정답

import sys
import re

# 숫자 제거한 오름차순 문자 리스트
s = sys.stdin.readline().strip()
word_list = sorted((re.sub("\d", "", s)))

# 문자 제거한 숫자
num = re.sub("[a-zA-Z]", "", s)
sum_res = 0

for n in num:
    sum_res += int(n)

print(f"{''.join(word_list)}{sum_res}")

정답

data = input()
result = []
value = 0

for x in data:
    if x.isalpha():
        result.append(x)
    else:
        value += int(x)

result.sort()

if value != 0:
    result.append(str(value))

print(''.join(result))

Tip

정규식

'''
	re.sub(정규식, 치환될 문자, 문자열) => 문자열 치환
    \d => 숫자만
    \w => 숫자, 소문자만
    \W => 숫자, 소문자, 대문자 영어만
    [a-zA-Z] => 소문자, 대문자 영어만
'''
word_list = re.sub("\d", "", s)
num = re.sub("[a-zA-Z]", "", s)

정규식은 re 라이브러리를 사용하여 문자를 치환할 수 있다. 정규식은 모든 문자열을 봐야하므로, 시간복잡도는 O(n)이다. 그래서 내가 쓴 코드는 모든 문자열을 2번 돌리고 숫자를 더하기 위해 for문을 한 번 더 돌려 총 3번을 돌리게 된다.

하지만, 리스트에 저장하여 출력하는 정답을 보면 반복문이 1번만 사용되기 때문에 지금 같은 예제는 2번 째 정답이 더 빠르고 좋다라고 할 수 있다.

 

isalpha(), isdigit(), isalnum()

해당 변수가 어떠한 유형인지 확인하는 함수이다.

메소드 이름 설명 반환값
x.isalpha() x가 알파벳인지 확인 True OR False
x.isdigit() x가 숫자인지 확인 True OR False
x.isalnum() x가 알파벳 또는 숫자인지 확인 True OR False

   References

본 그리디 알고리즘 문제 예제 및 개념은 나동빈 (이코테 2021 강의 몰아보기)  2. 그리디 & 구현을 참고합니다.

 

반응형

'Python 알고리즘' 카테고리의 다른 글

[Python 알고리즘] 백준 2875번 : 대회 or 인턴  (0) 2022.02.01
[Python 알고리즘] 백준 11047번 : 동전 0  (0) 2022.01.31
[Python] 구현 및 시뮬레이션 알고리즘을 파헤쳐 보자! (왕실의 나이트)  (0) 2022.01.27
[Python] 구현 및 시뮬레이션 알고리즘을 파헤쳐 보자! (시각)  (0) 2022.01.26
[Python] 구현 및 시뮬레이션 알고리즘을 파헤쳐 보자! (상하좌우)  (0) 2022.01.26
'Python 알고리즘' 카테고리의 다른 글
  • [Python 알고리즘] 백준 2875번 : 대회 or 인턴
  • [Python 알고리즘] 백준 11047번 : 동전 0
  • [Python] 구현 및 시뮬레이션 알고리즘을 파헤쳐 보자! (왕실의 나이트)
  • [Python] 구현 및 시뮬레이션 알고리즘을 파헤쳐 보자! (시각)
seungyong20
seungyong20
  • seungyong20
    코딩 기록소
    seungyong20
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Python 알고리즘 (38)
      • 자료구조 (1)
      • Project 하면서 알아가는 것들 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 기록하는 습관을 기르자
  • 인기 글

  • 태그

    multiplebagexception
    Typescript
    python slicing
    Python
    python 그리디 문제 추천
    jpa n + 1 문제
    jpa 에러
    python 알고리즘
    그리디 알고리즘
    python 2차원 배열
    kafka
    python 브루트 포스
    백준
    python 그리디 알고리즘 문제 추천
    join fetch 주의점
    jpa 쿼리 최적화
    JPA
    jpa multiplebagexception
    jpa eager
    jpa fetch
    python 이코테
    spring boot
    multiplebagexception set list
    python heap
    python 백준
    python 그리디 알고리즘
    jpa lazy vs eager
    python 방향벡터
    fetch join 주의점
    python 정렬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seungyong20
[Python] 구현 및 시뮬레이션 알고리즘을 파헤쳐 보자! (문자열 재정렬)
상단으로

티스토리툴바