computer science/Algorithm | Datastructure
[python] Simulation and Notation
훌룽이
2023. 6. 16. 12:54
1. 흐른 시간 계산
2시 5분에서 4시 1분이 되려면 몇 분이 흘러야 하는지를 어떻게 계산해 볼 수 있을까? 단순히
다음과 같이 2시 5분에서 시작하여 1분 단위로 시뮬레이션을 하며 60분이 되면 시간을 늘리고
분을 다시 0으로 맞추는 식으로 진행해볼 수 있다.
hour, mins = 2, 5
elapsed_time = 0
while True:
if hour == 4 and mins == 1:
break
elapsed_time += 1
mins += 1
if mins == 60:
hour += 1
mins = 0
print(elapsed_time)
2. 흐른 날짜 계산
2월 5일에서 4월 1일이 되려면 몇 일이 흘러야 하는지를 어떻게 계산해 볼 수 있을까?
윤년이 아니라고 가정하고 2월 5일에서 시작하여 1일 단위로 시뮬레이션을 하며, 해당 월에
있는 일 수 를 넘어가게 되면 그 다음 달로 넘기고 일자를 다시 1로 맞추는 식으로 진행해볼 수 있다.
month, day = 2,5
elapsed_days = 0
num_of_days = [0,31,28,31,30,31,30,31,31,30,31,30,31]
while True :
if month == 4 and day == 1 :
break
elapsed_days += 1
day +=1
if day > num_of_days[month] :
month += 1
day = 1
print(elapsed_days)
1. 2진수 계산
다음과 같이 숫자 29를 계속 2로 나눠주며 해당 몫과 나머지를 쭉 적어주는 식으로 이진법을 만들어 볼 수 있다.
지금까지 나왔던 나머지들을 거꾸로 순서대로 적어주면 이진법이 완성된다.
n = 29
digits = []
while True:
if n < 2:
digits.append(n)
break
digits.append(n % 2)
n //= 2
# print binary number
for digit in digits[::-1]:
print(digit, end="")
2. 2진수를 10진수로 변환
이진수 11101을 10진법으로 표현하면 오른쪽 방향으로 한칸씩 움직이며 간간하게 구해볼 수 있다.
아이디어는 num을 0번 index부터 i번 index까지 10진법으로 변환한 값이라 생각해보자 그러면 num 값은
i가 증가함에 따라 다음과 같이 변해야 한다.
num = num * 2 + binary[i]