python/23년도 겨울 방학 코딩 스터디

[이코테] part 3_3주차_p.322 문자열 재정렬 (2)

소곡이 2023. 2. 1. 20:18
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() : 숫자, 대문자 순