PLOD

[python] Simulation and Notation 본문

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]

 

 

Comments