과제-1

1에서 n까지 자연수에 대한 3,6,9 게임 결과를 출력한다.

 

조건
  1. 반드시 함수를 이용한다.
    하나의 숫자를 매개변수로 출력값을 리턴하는 함수를 작성한다.
    그리고, 이 함수를 이용하여 1에서 n까지의 3,6,9 게임 프로그램을 작성한다.

  2. 10 단위로 다음 줄에 출력한다.
실행 결과 예시

구현 결과

함수를 이용해서 해보라고 제시가 되었다.

하지만 백준 알고리즘처럼 러닝타임을 계산하는 게 아니기 때문에 클래스도 연습할 겸 아래와 같이 작성했다.

class game_369:
    
    def __init__(self, num_user = 0):
        self.num_user = num_user
        self.num_arr = []
        
    def f369(self, num): #숫자를 분해하여 3으로 나누어 떨어지는 수 찾기
        ten = 10
        num_old = 0
        stop_signal = 1
        count = 0
        num_arr = []
        index = 0
        while stop_signal: #스탑 시그널이 0이 될 때 까지 반복6
            if ten == 10: # 1의자리만 떼오기
                num_arr.append(num%ten) #어팬드
            else: # ten이 100의자리 검토 진입
                num_arr.append((num%ten-num_old)//int(ten//10)) #십의자리와 백의자리... 계속 리스트에 어팬드
            
            if num%ten - num == 0:
                stop_signal = 0
            else :
                stop_signal = 1 #num arr에 0이 인가되면 종료
            num_old = num%ten
            ten = ten*10 #십의자리씩 계속 올리며 계산
            index += 1
        for i in range(0, len(num_arr), 1): #리스트의 마지막이 0이므로 제외하고 3과 나누어 계산
            if num_arr[i] != 0 and num_arr[i] % 3 == 0:
                count += 1
            else:
                pass
        
        if count == 0:
            result = num
            self.num_arr.append(result)
        else:
            result = "짝"*count
            self.num_arr.append(result)

    def cal_369_game(self):
        for i in range(1,self.num_user + 1,1):
            self.f369(i)
            
    def print_369_game(self, num):
        for i in range(0, len(self.num_arr), 10):	# 인덱스 0을 시작으로 n 길이의 전 까지, 10씩
	        print(' '.join(map(str, self.num_arr[i:i+10])))
                
num_user = int(input("369게임:어디까지 수행할까요? :"))
game = game_369(num_user)
game.cal_369_game()
game.print_369_game(num_user)

뭔가 알고리즘을 공부하면 훨씬 쉽게 구현할 수 있을 것 같다.

'코딩 > Python' 카테고리의 다른 글

[파이썬] 컴퓨터 비전 - 이미지 잘라내기  (0) 2023.03.27