오늘 한 일

  • BOJ 1002번 터렛 문제를 드디어 풀었다. 어제 그렇게 열 번 가까이 연속으로 틀렸던 이유가 단지 if / elif / else문의 순서 때문이었다니 너무 허탈했다. 결과값은 순서와 상관없이 모든 경우에서 똑같이 나올 것 같은데, 내 착각인 걸까?
  • CodeUp에서 파이썬 기초 100제를 모두 풀었다. 지금껏 BOJ에서 풀었던 문제들에 비하면 난이도는 낮았고, 세어 보니 100제가 아닌 98제였지만 아무튼 푸느라 보람 있고 알고리즘 문제를 풀면서 행복감을 느낄 지경이었다. 앞으로 이 사이트를 애용해야겠다!!! ╰(*°▽°*)╯
   # 리스트의 원소 모두 출력하기
    >>>a_list = ['H', 'E', 'L', 'L', 'O']		# 원소는 문자열이어야 한다
    >>>print(' '.join(a_list)
    H E L L O
  • <점프 투 파이썬> 6장 '파이썬 프로그래밍, 어떻게 시작해야 할까?'를 봤다. 요 근래 알고리즘이 워낙 손에 익기도 하고 해서 까다로운 부분 없이 쉽게 쉽게 넘어갈 수 있었다.
  • <HTML+CSS+자바스크립트 웹 표준의 정석> 1장 '웹 개발 시작하기' ~ 4장 '웹 문서에 다양한 내용 입력하기'까지 봤다. 사전준비 과정에서 강의를 듣고 공부했던 부분이라 다시 한 번 복습한다는 느낌으로 가볍게 읽었다. 그 동안 사용해 온 파이참에서, 책에서 다루는 에디터인 vscode로 다시 돌아갔다. 금방 질리지 않게 마음에 드는 테마(Dracula official dark)로 설정해 두었다. 역시 웹페이지 디자인과 기능에 관여하는 건 재밌는 일이다. 다시금 프론트엔드에 대한 흥미를 확인하는 과정과도 같았다고나 할까. 과연 이 마음이 언제까지 유지될는지는...

내일 할 일

  • 자바스크립트 문법 강의를 완강한다.
  • 코드업에서 알고리즘 10문제를 푼다. (물론 기초 난이도로)
  • <HTML+CSS+자바스크립트 웹 표준의 정석> 5장 '입력 양식 작성하기' ~ 7장 '텍스트를 표현하는 다양한 스타일'을 본다.

오늘 한 일

  • 알고리즘 마라톤 40번까지의 문제 중 38번인 BOJ 1002 터렛 1문제만 남겨놓고 다시 풀었다. 이건... 한번 맞힌 적이 있는 문제인데도 답안을 제출할 때마다 계속해서 틀렸고, 결국 맞았던 답안을 켜놓고 비교해가며 수정해서 다시 제출했지만 또 틀렸다. 그래서 일단 오늘은 포기ㅠㅠ
  • <점프 투 파이썬> 5장 '파이썬 날개 달기'를 봤다. 지금껏 쓸 일도 없었고, 쓸 줄도 몰랐던 클래스와 패키지 같은 내게만 새로운 개념들이 나와서 유익했다. 내장 함수들도 사용 빈도가 높은 것들로 정리되어 있었다.
       # 생성자(Constructor): 객체 생성 시 자동으로 호출되는 메서드
        >>> def __init__(self, first, second):
           		self.first = first
            	self.second = second
        >>> a = FourCal(4,2)				# 객체 생성과 동시에 매개변수에 각각 4, 2 대입
        >>> print(a.first)
        4
        >>> print(a.second)
        2
        
        
        
        if __name__ == "__main__":			# 해당 파일을 직접 실행했을 때만 참이 됨
        	print(add(1, 4))
            print(sub(4, 2))
            
            
            
        try:
        	...
        except ZeroDivisionError as message:	# 오류 메시지 자체가 출력됨
        	print(message)
        except (FileNotFoundError, IndexError) as i:
        	print(i)​

내일 할 일

  • 알고리즘 마라톤 38번 BOJ 1002 터렛 문제 꼭 다시 풀고야 말겠다.
  • <점프 투 파이썬> 6장 '파이썬 프로그래밍, 어떻게 시작해야 할까?'를 본다. 

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

항해02_알고리즘(Day17)  (0) 2021.06.24
항해02_알고리즘(Day15)  (0) 2021.06.22
항해02_알고리즘(Day14): day-off  (0) 2021.06.21

오늘 한 일

  • 안타깝게도 오늘은 알고리즘 마라톤에서 새로 푼 문제는 없었다. 도저히 푸는 방법을 모르겠는 문제 네댓 개는 과감하게 패스하고, 이미 푼 문제들을 처음부터 다시 풀기 시작했다. 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

오늘 한 일

  • 스터디에서 알고리즘 마라톤 문제 5개를 풀었다. 전체적으로 다시 복습해 볼 충분한 시간을 갖기 위해 마음 같아서는 얼른얼른 끝내버리고 싶지만, 머리가 따라주지 않는다.
	# 입력받은 여러 개의 수를 리스트에 넣기
        x_list = [int(x) for x in input().split()]
               
        
        # 자료형의 원소들을 n개씩 골라 리스트에 넣기
        import itertools
        a_list = list(map(''.join, itertools.permutations(iterable, n)))	# 중복 허용
        b_list = list(map(''.join, itertools.combinations(iterable, n)))	# 중복 비허용
  • <점프 투 파이썬> 2장 '파이썬 프로그래밍의 기초, 자료형'을 봤다. 분량은 꽤 되지만 대체로 아는 내용이라 부담 없이 책장을 넘길 수 있었다. 물론, '이걸 진작에 알았더라면 코드를 그렇게 복잡하게 짜는 불상사는 없었을 텐데' 하는 것들도 있었다. 다른 사람들에게는 기본 중의 기본이겠지만, 어쨌거나 나는 코알못이니까.
	# 문자열 포매팅: 2개 이상의 값 넣기
        >>> number = 10
        >>> day = "three"
        >>> "I ate %d apples. so I was sick for %s days." % (number, day)
        
        # 또는, format 함수를 사용한 포매팅
        >>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
        
        # 결과는 같다. (하지만 난 f-string을 애용하겠지)
        'I ate 10 apples. so I was sick for three days.'
        
        
        
        # 문자열 삽입(join)
        >>> ",".join('abcd')
        'a,b,c,d'
        >>> ",".join(['a', 'b', 'c', 'd'])
        'a,b,c,d'
        
        
        
        # 리스트 뒤집기(reverse): 역순 정렬 아님에 주의
        >>> a = ['a', 'c', 'b']
        >>> a.reverse()
        >>> a
        ['b', 'c', 'a']
        
        
        
        # 리스트에 포함된 요소 x의 개수 세기(count)
        >>> a = [1, 2, 3, 1]
        >>> a.count(1)
        2
        
        
                								
        >>> a = {'name': 'pey', 'phone': '0119993323',
        		'birth': '1118'}
        >>> a.keys()				# 딕셔너리 key로 리스트 만들기						
        dict_keys(['name', 'phone', 'birth])
        >>> a.values()				# 딕셔너리 value로 리스트 만들기
        dict_values(['pey', '0119993323', '1118'])                
        >>> a['name']				# 존재하지 않는 키에 대해서는 오류 발생
        'pey'
        >>> a.get('name')			# 존재하지 않는 키에 대해서는 None을 반환
        'pey'
        >>> a.get('adress', 'moo')		# 키 값이 없을 경우 미리 정한 디폴트 값 반환
        'moo'
        
        
        
        >>> s1 = set([1, 2, 3, 4, 5, 6])
        >>> s2 = set([4, 5, 6, 7, 8, 9])
        >>> s1 & s2					# 교집합 구하기
        {4, 5, 6}
        >>> s1.intersection(s2)
        {4, 5, 6}
        >>> s1 | s2					# 합집합 구하기
        {1, 2, 3, 4, 5, 6, 7, 8, 9}
        >>> s1.union(s2)
        {1, 2, 3, 4, 5, 6, 7, 8, 9}
        >>> s1 - s2					# 차집합 구하기
        {1, 2, 3}
        >>> s1.difference(s2)
        {1, 2, 3}
       

내일 할 일

  • 일요일이니까 알고리즘 스터디와 알고리즘 마라톤은 잠시 쉬어간다! :)
  • 지난 일주일 간 읽기 목록에 넣어 놓기만 하고 건드리지 못했던 자료들을 한 번씩 훑어본다.
  • <점프 투 파이썬> 3장 '프로그램의 구조를 쌓는다! 제어문'을 본다. 아직 많이 삐그덕대는 내 제어문 구현에 많은 도움이 되길.

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

항해02_알고리즘(Day14): day-off  (0) 2021.06.21
항해02_알고리즘(Day12)  (0) 2021.06.19
항해02_알고리즘(Day11)  (0) 2021.06.18

오늘 한 일

  • 스터디에서 알고리즘 마라톤 문제 4개를 풀었다. 이제 스트레스 받지 않고, 모르는 건 적당히 찾아가며 공부하기로 했다. 복습이 필요하다면 다시 풀어보면 그만이다.

 

	round(n)				# n을 소수점 첫째 자리에서 반올림



	from collections import Counter

	Counter(iterable).most_common()		# 원소를 최빈값 순서로 튜플 형태로 나열



	max(iterable), min(iterable)		# 원소의 최댓값, 최솟값 구하기

 

  • 주특기 선택을 앞두고 튜터님과 5:1 면담을 가졌다. 면담 전에 사전 회고를 제출했었는데, 사실 내 최대 고민이었던 '주특기 선택' 자체는 사전 회고를 작성하기 직전에 해결된 것이나 마찬가지였어서 딱히 쓸 내용이 없었다. 어떻게 주특기 선택에 대한 결정을 굳혔는지를 나열했을 뿐이다. 다른 분들이 질문을 다양하게 해주셔서 나도 많이 얻어 들었다. 알고리즘은 해답을 보면서 풀어보기(대신 해답을 보기 전에 스스로 도전하고, 도전에 필요한 적절한 시간을 찾아 스스로 정하기), 오류는 해결하면 되므로 오류 내는 것을 두려워하지 말기, 코딩에 노베이스인 경우 베이스를 쌓아감과 동시에 베이스가 있는 다른 사람들의 코드를 리뷰하고 벤치마킹하기, 좋아하는 회사를 찾기가 어렵다면 팀블로그를 검색해 보고 내용이 마음에 드는 곳을 골라보기, 과한 검색에 매몰된다면 얕은 검색 시도해보기(링크 속에서 다른 링크 타고 들어가기 금지).
  • <점프 투 파이썬> 1장 전체, 2장 조금을 봤다. 기본서라 전체적으로 빨리빨리 읽어나갈 수 있었지만, 내가 몰랐던 내용들도 꽤 있었다. 구매를 서둘러서 다행이다.

내일 할 일

  • 알고리즘 마라톤 문제 4개 풀기
  • <점프 투 파이썬> 2장 마저 보기
  • 알고리즘 마라톤에서 고전하고 있는 문제 1개 풀기

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

항해02_알고리즘(Day13)  (0) 2021.06.20
항해02_알고리즘(Day11)  (0) 2021.06.18
항해02_알고리즘(Day10)  (0) 2021.06.17

+ Recent posts