어제 문제 하나 풀었다고 좋아하더니, 오늘은 못 풀었다.
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() 함수의 생사여부
'CS > 알고리즘' 카테고리의 다른 글
[이코테] DFS, BFS - 음료수 얼려먹기 (0) | 2023.02.02 |
---|---|
[이코테] 구현 - 문자열 압축 (0) | 2023.01.29 |
[이코테] 구현 - 럭키 스트레이트 (0) | 2023.01.27 |
[이코테] 구현 - 왕실의 나이트 (0) | 2023.01.26 |
[이코테] 구현 - 시각 (feat. or에 대한 탐구) (0) | 2023.01.26 |