본문 바로가기

알고리즘 삽질장

[이코테] 구현 - 문자열 재정렬

반응형

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

 


문제설명

알파벳 대문자와 숫자(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))
반응형