[항해] 알고리즘_2주차

Jeon·2021년 6월 14일

알고리즘

목록 보기
2/33

'21.06.14

1. 사칙연산

백준 #10869

###코드###
a,b = map(int, input().split())
print(a+b)
print(a-b)
print(a*b)
print(a//b)
print(a%b)

배운 점 : map(int, input().split())이 무엇인지 이해하게 되었다.
1) map = 특정 범위 내 집합형태의 것들(ex - 리스트)을 원하는 하나의 것(ex - int, str)으로 바꿔주는 기능
2) input() = 외부의 값을 입력받는 함수! / input() 사용 시 콘솔창에 값 입력이 가능해진다.
3) split() = input()으로 인해 콘솔창에 입력한 값들(ex - 20 43 / 쉼표 x)을 각각의 것으로 나누어준다. == 20, 43(쉼표 O)으로 각각 나누어줌.
종합) input()으로 받은 값들을 split해서 각각 int속성으로 한번에 바꿔준다!

2. 세자리수 곱셈

백준 #2588

###코드###
a = int(input())
b = input()
print(a * int(b[2]))
print(a * int(b[1]))
print(a * int(b[0]))
print(a * int(b))

3. 알람시계

백준 #2884

###코드###
a,b = map(int, input().split())
if 0 <= a < 24 and 0 <= b <= 59:
    to_minutes = a*60
    wake_minus = 45
    minutes_result = (to_minutes+b)
    result = minutes_result - wake_minus
    a_result = result//60
    b_result = result%60
    if a_result < 0:
        a_result = 24+a_result
    print(a_result, b_result)

4. 더하기 싸이클

백준 #1110

###코드###
#1. 정답코드 (int 계산)
import sys
n = int(sys.stdin.readline()) # // int 68
num = n
cnt = 0
while True:
    a = num // 10 # // int 6
    b = num % 10 # // int 8
    c = (a+b) % 10 # // int 1"4" == 나머지 4
    num = (b*10) + c # // 80 + 4
    cnt += 1
    if(num == n):
        break
print(cnt)

중요)
1) sys.stdin.readline : 빠른 입력!
input()과 겉보기에 똑같은 역할을 하지만, 시간초과가 나는 경우 빠른입력 사용하면 효율 상승한다. 다만 input()과는 다르게 '사용자가 입력한 문자열 + 개행 문자(\n)'가 저장되기 때문에 str문에서는 str(sys.stdin.readline.split('\n')) 이용하면 좋다.
2) while (조건) : 조건이 참(True)인 동안 이하문을 반복해서 실행한다! 정답코드를 보면 while True: 가 있음. 또한 if문도 포함되어 있음. 즉, 계속 while 이하 열을 반복하다가 if문의 조건 맞아서 실행(break)되면 멈추는 구조임.

###코드###
#2. 시간초과 코드 (str 계산)
import sys
n = str(sys.stdin.readline().strip('\n'))
num = n
cnt = 0
while True:
  if len(num) == 1:
      num = "0" + num
  plus = str(int(num[0]) + int(num[1]))  # str '8'
  num = num[-1] + plus[-1]  # str '68' #[-1]
  cnt += 1
  if num == n:
      print(cnt)
      break

중요)
1) str 계산한 결과 시간초과... : 정답코드와 다르게 아래는 시간초과로 판단되었다. 정답코드는 int로 계산을 하기 때문에 시간초과 코드에 비해 계산이 모든 면에서 빨랐다.
출력하는 결과는 같더라도 시간 차이가 크게 났다.
2) plus 코드에서 [-1]은 뭘까? : 제일 오른쪽 1자리만을 선택하는 표현임. 위 코드 내에서 계산되어야 하는 코드는 모두 '두자리'인데, [-1] 처리를 안할 경우 plus 계산값이 그대로 num 계산식에 반영되어 '두자리'로 반환되어야 할 num값이 '세자리'가 되는 경우가 발생한다. (ex : plus가 '14'일 때 num=num[-1]+plus[-1]일때는 num[-1]의 끝자리 '8'과 plus의 끝자리인 '4'가 식에 반영되어 '84'를 반환해야 하나, plus[-1]이 아니라 plus일 경우 '14'모두가 반영되어 '814'를 반환하므로 결과적으로 오류!

profile

0개의 댓글