문제
알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다,
입력 조건
- 첫째 줄에 하나의 문자열 S가 주어집니다. (1 <= S의 길이 <= 10,000)
출력 조건
- 첫째 줄에 문제에서 요구하는 정답을 출력합니다.
입력 예시 | 출력 예시 |
K1KA5CB7 | ABCKK13 |
AJKDLSI412K4JSJ9D | ADDIJJJKKLSS20 |
풀이
- 내 풀이
import re
a = input()
n = re.findall(r'\d', a)
n_sum = 0
for i in n:
n_sum += int(i)
abc = re.findall(r'[A-Z]', a)
abc.sort()
result = ''.join(abc)+str(n_sum)
print(result)
regex 정규표현식을 사용하여 숫자와 대문자를 나눠주고
숫자는 int로 하나하나 바꿔 합을 구해주고
대문자는 오름차순 정렬 후 list에서 다시 string으로 붙여주었다.
마지막 구한 정렬 문자와 숫자를 합해 출력
정규표현식 참고 : https://stackoverflow.com/questions/430079/how-to-split-strings-into-text-and-number
- 책 풀이
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))
isalpha() 메서드를 이용해 알파벳만 분리해 준 방법.
[] 하나에 알파벳 먼저 넣고 정렬한 후 숫자 합을 string으로 변환해 넣어줘 마지막에 같이 합쳐주었다.
+ 숫자가 하나라도 없을 경우를 고려해주었다!
내 풀이에서 숫자가 하나라도 없을 경우 0이 뒤에 붙어 출력되기 때문에 아래와 같이 수정이 필요하다.
import re
a = input()
n = re.findall(r'\d', a)
n_sum = 0
for i in n:
n_sum += int(i)
abc = re.findall(r'[A-Z]', a)
abc.sort()
if n_sum != 0:
abc.append(str(n_sum))
result = ''.join(abc)
print(result)
출처: 나동빈, 「이것이 취업을 위한 코딩테스트다 with 파이썬」, 한빛미디어, p.322
'Algorithms > 이코테' 카테고리의 다른 글
[구현] 이코테 - 시각(py) (0) | 2023.08.07 |
---|---|
[구현] 이코테 - 상하좌우(py) (0) | 2023.08.07 |
[구현] 이코테 기출 - 럭키 스트레이트(py) (0) | 2023.07.30 |
[구현] 왕실의 나이트 (0) | 2023.07.29 |
[Greedy] 이코테 - 볼링공 고르기(py) (1) | 2023.07.11 |