반응형
해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다.

문제설명
알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어진다. 이 때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력한다. 예를 들어, K1KA5CB7 이라는 문자열이 주어지면 ABCKK13을 출력한다.
입력조건
- 첫째 줄에 하나의 문자열 S가 주어진다.(1 <= S의 길이 <= 10,000)
출력조건
- 첫째 줄에 문제에서 요구하는 정답을 출력한다.
사고과정
- 일차적으로 풀이는 했지만 문자열 속에 숫자 문자열이 존재하지 않을 때의 반례를 고려하지 못했다. 반례...반례....🤯
- 문자열 값 중 알파벳 문자, 숫자 문자 인지를 구별하기 위해 아스키 코드(정수)로 바꾸는 ord('문자열') 함수를 사용했다. 하지만 풀이에서 보니 문자열이여도 해당 문자열이 문자인지 숫자인지 판단하는 함수 isalpha() 를 사용했다. 또 하나 모르는 거 발견...!
- 문제 길이가 짧다보니 문제 읽을 때 대충 읽어서 '뒤에 모든 숫자를 더한 값을 출력한다'를 못보고 그냥 숫자 요소들만 이어붙였다. 왜이리 조급해지는지... 쉬운 문제라도 침착하게 풀어야겠다..
풀이
1. 내가 푼 풀이
import sys
s = input()
string = []
number = []
for i in s:
if ord(i) < ord('A'):
print(i)
number.append(int(i))
else:
string.append(i)
string.sort()
number = [str(sum(number))]
# 주어진 문자열에 숫자가 아예 없을 경우의 반례
if number == 0:
res = ''.join(string)
else:
res = string + number
res = ''.join(res)
print(res)
2. 책 풀이
import sys
s = input()
string = []
number = 0
for i in s:
if i.isalpha():
string.append(i)
else:
number.append(int(i))
string.sort()
if number != 0:
string.append(str(number))
print(''.join(string))
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[이코테] 최단경로 - 전보 (0) | 2021.09.26 |
---|---|
[이코테] 최단경로 - 미래 도시 (0) | 2021.09.25 |
[이코테] 그리디 - 곱하기 혹은 더하기 (0) | 2021.09.16 |
[이코테] 이진탐색 - 정렬된 배열에서 특정 수의 개수 구하기 (0) | 2021.09.14 |
[이코테] 정렬 - 국영수 (0) | 2021.09.14 |