TIL(#05) - 3.06

Taewoong Moon·2021년 3월 6일
0

Python을 이용해서 알고리즘 개념에 대해 익혔다.

개념을 적용하는 문제는 백준 문제를 통해서 풀고 제출하고 정답을 확인하는 과정을 거치고 있다.

커버한 개념

  • 사칙연산
  • IF문
  • While문

백준 문제

  1. 두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오.
a,b = int(input())
print(a+b)
print(a-b)
print(a/b)
print(a%b)

배운점: input() 은 키보드에 입력한 값을 의미한다. str형태로 내려주기 때문에 int로 형변환 시켜주는 것이 중요.
그리고, 사칙연산이 제대로 안 될 경우에는 terminal에서 python --verison 혹은 python -V를 통해 확인하는 것이중요!만약에 python 2.x버전이면
alias python=python3 를 하자!

2.(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

a = int(input())
b = input()
c = a * int(b[1])) *10
d = a * int(b[0])) *100
e = a * int(b[2]))
print(a * int(b[2]))
print(a * int(b[1]))
print(a * int(b[0]))
print(c+d+e)

핵심은 str을 나오는 값을 통해서 먼저 문자열숫자를 뽑아내고 해당 문자열숫자를 int로 바꿔줘서 곱하고 싶은 숫자와 계산을 해서 결과를 도출한다.

다른 문제 해결방법

a = input()
b = input()
# a,b 를 정수로 변경
a = int(a)
b = int(b)
# a,b 를 연산 (자릿수 별 연산 필요) * / %
print(a * ( b % 10 ))
print(a * ( int(b / 10) % 10)) # int(33.3) == 33 -> 33 % 10 == 3
print(a * int(b / 100)) # int(9.33) == 9
print(a * b)
  1. 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.

상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.

이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.

바로 "45분 일찍 알람 설정하기"이다.

이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.

현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

h = str(input())
m = str(input())

if m > 44:
	print(h, m-45)
elif m < 45 and h >=1:
	print(h-1, m+15)
else:
	print(23, m+15)

해당 문제는 if문을 통하여 푸는 문제인데 시간 개념에 대해 알고 어떤 조건으로 나뉘어져야하는지 생각해보고 풀 문제다.

분이 45분이상이라고하면 그냥 45분을 빼면 되는 문제다.
만약 h가 1이상이고 m이 45미만이면 h-1을 해주고 m에서는 15를 더하면 된다.
분이 45분미만인데 시간이 0면 h를 23으로 고정해주고 m+15로 선언하면 되는 문제이다.'

  1. 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
    26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
    위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
    N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
import time
number_ = int(input())
check_number = number_
temp_num = 0
cycle_number = 0
while True:
    temp_num = number_%10 + number_//10
    new_num = (number_%10)*10 + temp_num%10
    number_ = new_num
    cycle_number += 1
    if new_num == check_number:
        break
time.sleep(1)
print(cycle_number)

여기서 주의해야할 점은 변수지정이다. number라는 변수값이 처음 input 받은 이후에도 비교대상으로 계속 바꿔줘야하기때문에 check_number 라는 변수를 생성해서 number기존 값을 받아줘야한다.
그리고 난 이후에 temp_num 을 생성해 while문 안에다가 저장하고 코딩을 진행하면 된다.
cycle_number도 else문을 따로 만들어서 하게되면 마지막에 26값이 맞는 시점에 cycle +1이 되지않는다. 그러므로 미리 if문 위에 넣어서 값을 정확히 받는다.

profile
모든 코드에 의미를 담겠습니다.

0개의 댓글