본문 바로가기
CS/알고리즘

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

by 데브겸 2023. 1. 28.

어제 문제 하나 풀었다고 좋아하더니, 오늘은 못 풀었다.

 

1. 내 풀이

S = input()
data_list = sorted(S)
result = 0
tmp = []

for data in data_list:
    if int(data) == True:
        result += int(data)
        print("result: ", result)
    else:
        tmp.append(data)
        print("tmp: ", tmp)

 

1-1. 풀이 도중 생각

1) 입력된값이 숫자인지는 어떻게 감지할 수 있을까? 검사했을 때 문자인거는 문자인거는 어떻게 알 수 있을까? 

    - int(), str()를 쓰는 방법은 아닌 것 같은데... (그러면 에러나니까)

2) 예외처리에 대해서 알아야 풀 수 있는 문제일까? 

 

 

2. 정답

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))

isalpha라는 함수가 있다니; 허무하군...

 

 

3. 새로 공부하게 된 것 or 새삼 다시 알게 된 것

- python의 내장함수 isalpha(), isdigit(), isalnum()

# isalpha(): 문자열의 구성이 모두 문자라면 True, 숫자 및 공백이라면 혹은 포함되어 있으면 False
alpha.isalpha() # True
a13lpha.isalpha() # False


# isdigit(): 문자열의 구성이 모두 숫자라면 True, 문자 혹은 공백이 있으면 False
12344.isdigit() # True
al_pha.isdigit() # False


# isnumeric(): 문자열의 구성이 모두 숫자라면 True, 문자 및 공백이라면 혹은 포함되어 있으면 False
alpha.isnumeric() # False
13.isnumeric() # True


# isdigit() vs isnumeric()  
# isdigit은 엄격하게 숫자만 True로 반환, 하지만 isnumeric은 훨씬 범위가 넓음. 계산해서 숫자로 나오는 것까지 인정
# 예를 들어 거듭제곱이나 분수 등의 표현도 isdigit의 관점에서는 특수문자이지만, numeric에서는 수의 표현으로 보아 True로 반환
# 그런데 '3**2'는 false로 나오고 '2²'는 True로 나옴...

# isalnum(): 문자열의 구성이 숫자 혹은 문자로 있으면 True, 공백과 특수문자 있으면 False
ex1 = "1alpha"
ex2 = "1 alpha"
ex1.isalnum # True
ex2.isalnum # False

- join() 함수의 생사여부