BAEKJOON : 2753, 2884, 15552, 2439, 10951, 1110

Codren·2021년 6월 9일
0
post-custom-banner

No. 2753

1. Problem




2. My Solution

year = int(input())

if year % 4 == 0 and year % 100 != 0:
    print(1)
elif year % 400 == 0:
    print(1)
else:
    print(0)




3. Others' Solutions

y = int(input())
print((y%400<1,y%4<1)[y%100>0])		# 튜플()[인덱스]




4. Learned

  • (y%400<1,y%4<1)[y%100>0] bool 자료형 튜플에 [] 인덱스 접근 연산자 사용된 것임




No. 2884

1. Problem




2. My Solution

H,M = map(int,input().split())

if M >= 45:
    print(f"{H} {M-45}")
elif H == 0:
    print(f"23 {M+60-45}")
else:
    print(f"{H-1} {M+60-45}")




3. Others' Solutions

h,m=map(int,input().split())
m-=45
print((h-(m<0))%24,m%60)




4. Learned

  • 나머지의 공식인 a = bq + r (0≤r≤|b|) 로인해 -1%24 =23
  • 분을 0부터 59로 했을 때 % 60을 하면 60이 됐을 때 0으로 바뀌므로 m%60 사용
  • 특정 경우가 아니라 범용으로 적용 시킬 수 있는 알고리즘을 생각하자




No. 15552

1. Problem




2. My Solution

  • 시간초과
count = int(input())

for i in range(0,count):
    a,b = map(int,input().split())
    print(a+b)




3. Others' Solutions

  • import sys
import sys

count = int(sys.stdin.readline().strip())

for i in range(0,count):
    a,b = map(int,sys.stdin.readline().strip().split())
    print(a+b)




4. Learned

  • sys.stdin.readline() - 사용자로부터 문자열을 입력 받음 (시간 단축)
  • strip() - readine() 으로 입력 받은 문자열은 마지막 입력되는 개행 문자까지 포함하기 때문에 제거




No. 2439

1. Problem




2. My Solution

  • print(a,b) 출력시 자동으로 사이에 ' ' 공백 추가됨
import sys
n = int(sys.stdin.readline().strip())

for i in range(1,n+1):
    print(" " * (n-i), "*" *i,sep='')




3. Others' Solutions

  • sep='' 사용하지 않고 + 연산자로 바로 연결
i=int(input())
j=1
exec('print(" "*(i-j)+"*"*j);j+=1;'*i)




4. Learned

  • print(a,b) 출력시 자동으로 사이에 ' ' 공백 추가됨
  • print(a+b) 출력시 바로 연결되어 출력 (a,b는 문자열)




No. 10951

1. Problem




2. My Solution

  • while 문이 종료되는 조건이 존재하지 않음
  • 아무런 입력도 주지 않을 경우 exception 발생
import sys

while(True):
    a,b = map(int,sys.stdin.readline().strip().split())
    print(a+b)




3. Others' Solutions

  • try-except 문을 이용하여 프로그램에 더이상 입력이 들어오지 않아 예외 발생할 경우 break
import sys

while(True):
    try:
        a,b = map(int,sys.stdin.readline().strip().split())
        print(a+b)
    except:
        break




4. Learned

  • while 문의 종료 조건이 없을 경우 try-except 문 이용하자 (EOF)




No. 1110

1. Problem




2. My Solution

  • 각 자릿수를 더하기 위해 str로 변환하고 다시 int 로 변환
import sys

preNum = n = int(sys.stdin.readline().strip())
cycle = 0

while(True):
    addNum = (preNum // 10) + (preNum % 10)          # 각 자리의 수를 더함   
    newNum = str((preNum % 10)) + str((addNum % 10)) # 원래 수 오른쪽 값과 새로 생긴 수 오른쪽 값을 더함 
    preNum = newNum = int(newNum)
    cycle += 1

    if newNum == n :
        break

print(cycle)




3. Others' Solutions

  • 왼쪽 수는 10의 자리이므로 10을 곱하여 계산
import sys

preNum = n = int(sys.stdin.readline().strip())
cycle = 0

while(True):
    addNum = (preNum // 10) + (preNum % 10)          # 각 자리의 수를 더함   
    newNum = ((preNum % 10)*10) + (addNum % 10)     # 원래 수 오른쪽 값과 새로 생긴 수 오른쪽 값을 더함 
    cycle += 1

    if newNum == n :
        break
    
    preNum = newNum
    
print(cycle)




4. Learned

  • 수행되는 함수의 수가 최소화 될 수 있도록 노력하자
post-custom-banner

0개의 댓글