오늘 한 일

  • 안타깝게도 오늘은 알고리즘 마라톤에서 새로 푼 문제는 없었다. 도저히 푸는 방법을 모르겠는 문제 네댓 개는 과감하게 패스하고, 이미 푼 문제들을 처음부터 다시 풀기 시작했다. 1번부터 17번까지 풀었다. 아래 코드블럭은 BOJ 1011번 'Fly me to the Alpha Centauri'의 해답이다. 이동하는 거리에 상관없이 모든 경우에 통용되는 공식만 찾으면 생각보다 쉽게 풀리는 문제였다. 이걸 가지고 며칠간 손도 못 댄 채로 있었다는 게 놀라울 정도였다. 며칠에 걸쳐 고민한 덕에 풀었다고 봐야 할까?
import sys

t = int(sys.stdin.readline().rstrip())
for _ in range(t):
    x, y = map(int, sys.stdin.readline().split())
    distance = y - x
    if distance == 1 or distance == 2:
        print(distance)
    else:
        i = 2
        while True:
            if i*i < distance <= i*i+i:
                print(i*2)
                break
            elif distance <= i*i:
                print(i*2-1)
                break
            else:
                i += 1
  • <점프 투 파이썬> 4장 '프로그램의 입력과 출력은 어떻게 해야 할까?'를 봤다. 함수는 내 약점이기도 하다. 어떤 특정한 기능을 하는 함수인 줄 알았던 lambda는 def와 같은 것이었다. 활용 방법이 정해져 있는 게 아니라 def처럼 함수를 자유롭게 만들어 쓸 수 있는 도구였던 것이었다.
	# 여러 개의 입력값을 처리하기
	def add_mul(choice, *args):
    	if choice == "add":			# 매개변수 choice에 'add'를 입력받았을 때
        	result = 0
            for i in args:
            	result += i			# *args에 입력받은 모든 값을 더한다.
        elif choice == "mul":			# 매개변수 choice에 'mul'을 입력받았을 때
        	result = 1
            for i in args:
            	result *= i			# *args에 입력받은 모든 값을 곱한다.
        return result
        
        
        
  	  # 키워드 파라미터
   	 def print_kwargs(**kwargs):
    		print(kwargs)
        
   	 print_kwargs(name='foo', age=3)	# {'age': 3, 'name': 'foo'}
    
    
    
   	 # lambda
   	 add = lambda a, b: a+b
   	 result = add(3, 4)
   	 print(result)				# 7

내일 할 일

  • 이미 풀었던 알고리즘 마라톤 문제 18번~40번을 다시 푼다.
  • <점프 투 파이썬> 5장 '파이썬 날개 달기'를 본다.

'항해99 > 02_알고리즘(Day5~18)' 카테고리의 다른 글

항해02_알고리즘(Day16)  (0) 2021.06.23
항해02_알고리즘(Day14): day-off  (0) 2021.06.21
항해02_알고리즘(Day13)  (0) 2021.06.20

+ Recent posts