[이코테][유형별 기출문제][구현] 문자열 재정렬

2022. 5. 24. 02:16Algorithm/이코테

문제

 

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

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

 

입력조건

 

첫째 줄에 하나의 문자열 S가 주어집니다. (1 <= S의 길이 <= 10,000)

 

출력조건

 

첫째 줄에 문제에서 요구하는 정답을 출력합니다.


Code

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

# 값을 하나씩 확인하며 result와 value에 들어갈 값 연산
for x in data:
    if x.isalpha():
        result.append(x)
    else:
        value += int(x)

# 알파벳 정렬
result.sort()

# 숫자가 존재하는 경우에 result 뒤에 삽입
if value != 0:
    result.append(str(value))

# 리스트를 문자열로 변환하여 출력
print(''.join(result))

 


Think

 

리스트? 튜플?

 

result를 선언할 때, '이거 리스트로 작성해야되나, 튜플로 작성해야되나' 문득 생각이 들었다.

문제에서 result에 계속 append를 해서 문제를 풀어나가야 하기 때문에 리스트를 사용하는게 맞다.

튜플은 초기값이 변경되지 않기 때문에 문제에서 사용하기 적절하지 않다.

 

▶ isalpha()

 

isalpha() : 문자열이 알파벳일 경우 'True', 아닌 경우 'False' return

isdigit() : 문자열이 숫자일 경우 'Ture', 아닌 경우 'False' return

 

만약 문자열에 띄어쓰기가 있을 경우에는 무조건 'False'가 return된다.

 

  리스트를 문자열로 변환하여 출력하는 경우

 

리스트를 문자열로 변환하지 않고 그냥 출력하는 경우에는 다음과 같이 출력된다.

리스트 형태로 바로 출력되기 때문에, 문자열로 변환 후 출력을 해줘야 한다.

 

 

▶ ''.join(result)

 

'' 안에는 구분자로 사용할 것을 넣는다.

예를 들어 쉼표(,)를 넣으면 'A,D,F,G,S,3'로 출력된다.

 

리스트가 모두 문자열일때 사용하는 함수. 즉 정수형 등이 리스트에 있으면 오류가 난다.

 

리스트에 숫자가 들어있을 때 사용하는 함수

''.join(str(_) for _ in a)

 

 

 

 

//   for i in range(len(result))
        printf(result[i])