728x90
문제 (출처 : <이것이 코딩 테스트다> )
제출한 코드
class sortedStr:
def __init__(self):
self.S = None
self.sortedS = None
self.S_MIN = 1
self.S_MAX = 10000
def inputValue(self):
s = input()
if self.checkValueMinMax(len(s)):
if self.checkValidateInput(s): return s
else: print("숫자 혹은 영어 대문자를 입력하세요")
else: print(str(self.S_MIN)+" 이상 "+str(self.S_MAX)+" 이하 입력하세요.")
return self.inputValue()
def checkValueMinMax(self, value):
return self.S_MIN <= value and self.S_MAX >= value
def checkValidateInput(self, value): # 숫자 : 48~57, 대문자 : 65~90
for v in value:
if ord(v)<48 and ord(v)>57 or ord(v)<65 and ord(v)>90: return False
return True
def splitStrNum(self, value):
alpha_index = 0
for v in value:
if v.isalpha():
alpha_index = value.index(v) # 알파벳이 처음 시작하는 인덱스
break
return value[:alpha_index], ''.join(v for v in value[alpha_index:]) # 리스트-> 문자열
def sumNum(self, value):
result = 0
for v in value: result+=int(v)
return result
def run(self):
self.S = self.inputValue()
num, string = self.splitStrNum(sorted(self.S)) # 이런 경우 명시적으로 매개변수를 넘겨주는게 더 유용할까 아니면 인스턴스 변수를 사용하는 게 더 유용할까
sum_num = self.sumNum(num)
self.sortedS = string+str(sum_num)
test = sortedStr()
test.run()
print(test.sortedS)
문제 풀이
🔆문제 요약
- input
- 알파벳 대문자와 숫자로만 구성된 문자열 S
- 1≤문자열의 길이≤10000
- output
- 알파벳 오름차순과 모든 숫자를 더한 값
🔆문제 풀이
- 입력값
- 문자열 길이 체크
- 문자열이 대문자 or 숫자인지
- 문제 풀이
- 문자열 대문자와 숫자 분리
- 문자열 알파벳 순차대로→ sorted(문자열)
- 문자 모두 합산
- 대문자와 숫자 합치기
🔆기능 사항
- class sortedStr:
- def inputValue(): 입력값 처리→ def checkValidateInput(value) : 입력값이 대문자 or 숫자인지
- → def checkValueMinMax(value) : 문자열 길이의 유효성 체크
- def splitStrNum(value) : 대문자와 숫자 분리
- def sortedValue(value) : 정렬
- def run() : 메인
- 입력값 처리
- 정렬
- 출력
기타
- isupper()는 소문자가 끼어있으면 Fasle 반환, 숫자와 한글은 노상관
- sorted() : 숫자, 대문자 순
'python > 23년도 겨울 방학 코딩 스터디' 카테고리의 다른 글
[이코테] part 2_6주차_플로이드 와샬_p.261 미래 도시 (2) | 2023.02.15 |
---|---|
[이코테] part 3_3주차_p.322 문자열 재정렬 (2) (0) | 2023.02.01 |
[이코테] part 3_3주차_p.321 럭키 스트레이트 (1) (0) | 2023.02.01 |
[이코테] part 2_2주차_p.201 떡볶이 떡 만들기 (0) | 2023.02.01 |
[이코테] part 2_3주차_p.99 1이 될 때까지 (0) | 2023.02.01 |