20211021 TIL

JIHYE·2021년 10월 21일
0

오늘 배운 것

algorithm

baekjoon no.1110

문제

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))

beakjoon no.2588

문제

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)			# 모든 수가 출력된 후 원본값의 곱한 값 출력

beakjoon no.2884

문제

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)	

Linkedlist

연결리스트. 노드가 데이터와 포인터로 이루어져있고, 한 줄로 연결되어있는 방식의 자료구조. 노드의 포인터가 다음 노드를 가리키는 구조이다. 배열에 비해 자료의 추가, 삭제가 유연하다. Python과 JAVA는 garbage collector(👍🏻)가 있기때문에 C언어와 달리 삭제 된 Node를 free() 해줄필요가 없다.

Linkedlist 만들기

먼저 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 등 을 배웠던 기억이 나는데 다른 언어로 구현해보는것도 재밌는 경험인것 같다.
알고리즘 이나 자료구조나 둘다 머리아프지만 문제가 해결됐을 때의 그 희열이 너무 좋다. 곡쓰기싫을때 화성학문제를 푸는 느낌이 들기도하고 뭔가 과거를 회상하게 되는 지점이 많았다.
한주간 후회없이 공부해야지!

profile
초보개발자의 개발일기

0개의 댓글