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

[이코테] part 3_3주차_p.321 럭키 스트레이트 (1)

소곡이 2023. 2. 1. 18:27
728x90

 


 문제 (출처 : <이것이 코딩 테스트다>)


 제출한 코드

class character:
    def __init__(self):
        self.N = None
        self.N_MIN = 10
        self.N_MAX = 99999999
        
    def inputValue(self):
        try:
            N = int(input())
            return N
        except ValueError:
            print("정수형만 입력하세요") 
            return self.inputValue()
        except:
            print("입력 에러")
            return self.inputValue()

    def isEvenNumber(self, value):
        return True if len(str(value))%2==0 else False
        
    def validateNumber(self, value):
        return value>=self.N_MIN and value<=self.N_MAX
    
    def validateScore(self):
        N = self.inputValue()
        
        if not(self.isEvenNumber(N)):
            print("짝수 개수로 입력하세요.")
            return self.validateScore()
        if not(self.validateNumber(N)):
            print(str(self.N_MIN)+" 이상 "+str(self.N_MAX)+" 이하의 값을 입력하세요.")
            return self.validateScore()
        
        return str(N)
    
    def inputNowScore(self):
        self.N = self.validateScore()
class game:
    def __init__(self):
        self.user = None
        
    def sumList(self, value):
        score = 0
        for v in value: score+=int(v)
        return score
        
    def spacialMove(self):
        mid = len(self.user.N)//2
        left_score = self.sumList(list(self.user.N[:mid]))
        right_score = self.sumList(list(self.user.N[mid:]))
        
        return "LUCKY" if left_score==right_score else "READY"

    def gameStart(self):
        self.user = character()
        self.user.inputNowScore()  # 현재 캐릭터 점수를 문자열로 받아옴
        print(self.spacialMove())
a =game()
a.gameStart()

문제 풀이

🔆문제 요약

💡 입력받은 캐릭터의 점수 N을 반으로 갈라 각각 왼쪽과 오른쪽을 합했을 때 기술을 쓸 수 있는지 없는지 구해라.

  • input : 현재 캐릭터 점수 N
  • output
    • 기술을 쓸 수 있을 때 : LUCKY
    • 기술을 쓸 수 없을 때 : READY
  • 조건
    • N의 자릿수는 항상 짝수임
    • 자릿수를 기준으로 반으로 나누어 왼쪽과 오른쪽의 합이 같아야 함(=기술을 쓸 수 있음)

🔆문제 풀이

  • input
    • N은 길이가 짝수
    • N은 정수
    • N은 10이상, 99999999이하
  • 문자열로 입력받고 반으로 자른 뒤 각각 왼쪽과 오른쪽을 합함
  • 같은 지 확인하고 output

🔆기능 사항

  • 캐릭터 클래스
    • def inputValue() :
      • try~except 사용해서 문자열 거르기
    • def isEvenNumber(value) : 입력받은 값이 짝수면 true 반환
    • def validateNumber(value) : min, max를 만족하는 수일 때 true 반환
    • def validateScore() : 유효한 점수를 입력 받기 위한 클래스, N 반환
    • def inputNowScore() : 유효한 점수를 저장함
  • 게임 클래스
    • def gameStart()
      • 캐릭터 클래스를 생성해서 현재 캐릭터 점수 입력받기
    • def spacialMove() : 필살기를 쓸 수 있는 지
    • def sumList(value) : 문자열로 이루어진 리스트들을 정수형으로 바꿔 모두 합함
      • 왼쪽 점수와 오른쪽 점수를 합하기 위함