<문제>
알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.
<입력 조건>
첫째 줄에 하나의 문자열 S가 주어집니다. (1 <= S의 길이 <= 10,000)
<출력 조건>
첫째 줄에 문제에서 요구하는 정답을 출력합니다.
<입력 예시 1>
K1KA5CB7
<출력 예시 1>
ABCKK13
<입력 예시 2>
AJKDLSI412K4JSJ9D
<출력 예시 2>
ADDIJJJKKLSS20
<내 풀이>
우선 입력받은 문자열에서 문자 하나하나가 숫자인지 확인한다. 숫자라면 변수를 설정해서 더하고, 숫자가 아닌 문자라면 리스트에 저장한다. 그 리스트를 오름차순으로 정렬한 뒤, join을 사용해서 문자열을 붙여서 출력한다.
s = input()
letters = []
sum = 0
for i in s:
if i.isdigit(): # 숫자라면
sum += int(i)
else: # 문자라면
letters.append(i)
letters.sort() # 오름차순 정렬
print("".join(letters) + str(sum))
<책 풀이>
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))
책의 풀이를 보다가 깨달았는데, 내 코드는 sum이 0인 경우 예를 들어 ABCKK0이라고 출력한다. 이 경우에 대해 처리해줘야 한다.
s = input()
letters = []
sum = 0
for i in s:
if i.isdigit(): # 숫자라면
sum += int(i)
else: # 문자라면
letters.append(i)
letters.sort() # 오름차순 정렬
if sum != 0:
print("".join(letters) + str(sum))
else:
print("".join(letters))
코드를 수정했다.
'코딩 테스트' 카테고리의 다른 글
[이코테] 구현 문제 : Q 10. 자물쇠와 열쇠 (0) | 2023.08.08 |
---|---|
[이코테] 구현 문제 : Q 09. 문자열 압축 (0) | 2023.07.23 |
[이코테] 구현 문제 : Q 07. 럭키 스트레이트 (0) | 2023.07.20 |
[이코테] 그리디 문제 : Q 06. 무지의 먹방 라이브 (0) | 2023.07.19 |
[이코테] 그리디 문제 : Q 05. 볼링공 고르기 (0) | 2023.07.19 |