Algorithm

[이코테] 문자열 재정렬

y_lime 2024. 10. 22. 19:57

1. 문제

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

  • 예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.

2. 문제 해결 아이디어

  1. 문자열 입력됐을 때 문자 하나씩 확인
  2. 숫자인 경우, 따로 합계를 계산
  3. 알파벳의 경우, 별도의 리스트에 저장
  • 리스트에 저장된 알파벳을 정렬해 출력하고, 합계를 뒤에 붙여 출력하기

✍ 입력

K1KA5CB7

💻 출력

문자열 정렬 : ABCKK
모든 숫자 더하기 : 1 + 5 + 7 = 13
ABCKK13

3. 나의 코드

우선 코드를 작성하기 전에 문자열의 구성이 알파벳인지 한글인지 확인을 해야한다.

문자열의 구성이 알파벳 or 한글인지 확인하는 방법 [isalpha]

isalpha()라는 내장함수 사용, 단 문자열에 기호, 문자, 공백 중 하나라도 포함이 되어있으면 False를 리턴한다.

 

숫자인지 확인하는 방법 [isdigit]

위와 비슷하게 isdigit()라는 내장함수를 사용하여 확인한다.
이땐 기호, 문자, 공백 중 하나라도 포함이 되어있으면 False를 리턴한다.

input_data = input()
# 424RFD
# ['4', '2', '4', 'R', 'F', 'D']
array=[]
total = 0
for i in range(len(input_data)):
    if(input_data[i].isalpha()) :
        array = array.append(input_data[i]) # 틀린 표현 
        array.append(input_data[i]) # 맞는 표현
        # append는 재할당해주면 안됨!!!
    else :
        total += int(input_data[i])
array.sort()
print(''.join(array) + str(total))  # 리스트를 문자열로 변환 후, 숫자의 합을 이어서 출력

4. 정답 코드

생각해보니 내 코드를 작성할 땐, 숫자가 없을 때를 생각 못했다.
그리고 굳이 range를 써서 인덱스를 추가해줄 필요가 없었다.

for x in input_data :
    if x.isalpha() :
        array.append(x)
    else:
        total += int(x)

array.sort()

if(total!=0):
    array.append(str(total))

print(''.join(array))

'Algorithm' 카테고리의 다른 글

[BaekJoon] 23971 - ZOAC 4  (0) 2024.11.10
[BaekJoon] 3052 - 나머지  (0) 2024.11.10
[BaekJoon] 10813 - 공 바꾸기  (0) 2024.11.10
[BaekJoon] 1546 - 평균  (0) 2024.11.10
[이코테] 개미 전사  (0) 2024.10.22