number = int(input()) # input은 str로 받아오기때문에 int로 형변환을 해준다
def plus_cycle(number):
if number >= 100: # 0 ~ 99 정수가 주어진다고 했지만 혹시몰라서 예외처리
return
temp = number # number값이랑 비교해야하기 때문에 temp에 복사해준다
count = 1
while (True): # 무한 반복
last_number = temp % 10 # number의 1의자리 구하기
temp /= 10 # number의 10의 자리를 1의자리로 만들기
first_number = int(temp) % 10 # temp가 float으로 변하기때문에 int로 형변환한후 10의자리 구하기
new_number = first_number + last_number
if new_number >= 10: # 새로운 수가 2자리일 수 있기때문에 다시 1의자리 구하기
new_number %= 10
answer = (last_number * 10) + new_number #새로운 수 생성
if answer == number: # 입력받은 수와 새로운 수가 같으면 횟수를 반환
return count
else:
count += 1 # 횟수를 1증가
temp = answer # 새로운 값 복사 후 반복문 재실행
print(plus_cycle(number))
num1 = int(input()) # 받아온 두 수를 정수로 형변환
num2 = int(input())
multiply = num1 * num2
# 마지막에 두 수의 곱을 출력해야하기때문에 미리 변수에 저장
while num2 / 10 > 0:
# num2의 몫이 0 이되면 곱할 수가 없기때문에 0보다 클때 반복문 실행
multiply_number = num2 % 10 # num2의 1의 자리 찾기
print(num1 * multiply_number)
num2 = int(num2 / 10) # num2의 10의 자리를 1의자리로 만들기
print(multiply) # 모든 수가 출력된 후 원본값의 곱한 값 출력
num = input().split() # 두 수를 받아온 뒤 나누기
hour = int(num[0]) # 정수로 형변환
min = int(num[1]) - 45 # 정수로 형 변환 후 45를 빼서 저장
if min < 0: # min이 음수일때
min += 60 # hour에서 빼온 60min( 1 hour == 60 min)
hour -= 1
if hour <= 0: # hour-- 를 했기때문에 24를 더해서 음수가 되지않게 해줌
hour += 24
if hour == 24: # 24시 일때는 0으로 출력해야한다
hour = 0
print(hour, min)
연결리스트. 노드가 데이터와 포인터로 이루어져있고, 한 줄로 연결되어있는 방식의 자료구조. 노드의 포인터가 다음 노드를 가리키는 구조이다. 배열에 비해 자료의 추가, 삭제가 유연하다. Python과 JAVA는 garbage collector(👍🏻)가 있기때문에 C언어와 달리 삭제 된 Node를 free() 해줄필요가 없다.
먼저 Node의 구조체를 선언해준다
class Node:
def __init__(self, data): # Class의 Constructor(생성자)
self.data = data # data를 담는 장소
self.next = None # 다음 Node를 가리키는 포인터
Linkedlist의 head가 처음 만들어진 Node를 가리키게 해준다
class LinkedList():
def __init__(self, data):
self.head = Node(data)
Node를 추가해서 연결해준다
def append(self, data):
if self.head is None: # head값이 None일때, 예외처리
self.head = Node(data)
return
제일 마지막 Node의 next 값이 None이기때문에 반복문을 통해서 제일 마지막 Node를 찾는다
cur = self.head # Linkedlist의 처음 값을 저장
while cur.next is not None:
cur = cur.next # 다음값이 None이 될때까지 이동
cur.next = Node(data)
C언어로 자료구조를 배울때는 malloc과 pointer 개념때문에 힘들었던 기억이 있다. python으로 구현하는 연결리스트는 어떨까 생각했는데 역시나 기본 구조가 같기때문에 개념적으로는 이해가 됐지만 직접 구현하는 것은 쉽지가 않았다.
역시 연습만이 살길이구나 라는 생각도 했다.
stack, queue, binary tree 등 을 배웠던 기억이 나는데 다른 언어로 구현해보는것도 재밌는 경험인것 같다.
알고리즘 이나 자료구조나 둘다 머리아프지만 문제가 해결됐을 때의 그 희열이 너무 좋다. 곡쓰기싫을때 화성학문제를 푸는 느낌이 들기도하고 뭔가 과거를 회상하게 되는 지점이 많았다.
한주간 후회없이 공부해야지!